webpack配置(第四步:html篇(進階篇))
webpack.config.js檔案
const path = require(`path`);
let htmlwebpackplugin = require(`html-webpack-plugin`);//引入html-webpack-plugin外掛
let export_html= {
entry: {
main:__dirname+"/app/js/main.js",//入口檔案
main1:__dirname+"/app/js/main1.js",//入口檔案
},
output: {
path: __dirname+"/_build/",
filename: "js/[name].js",//產出檔案,name根據entry的入口檔案鍵名定
},
module: {
loaders: [
{
test: /(.jsx|.js)$/,
loader: `babel-loader`,
query: {
presets: [`es2015`]
}
},
]
}
,
plugins: [
//new一個模板出來,這一個不使用chunks
new htmlwebpackplugin({
template: `./app/home.html`,//入口檔案
filename: `home1.html`,//產出檔案
}),
//new一個模板出來
new htmlwebpackplugin({
template: `./app/home.html`,//入口檔案
filename: `home2.html`,//產出檔案
chunks : [`main`],//可以設定chunks按需引入JS檔案,不設定就會引入所有產出的js
chunksSortMode: `manual`,//將chunks按引入的順序排序,不用這個的話,引入到html的JS可能是錯亂排序的
})
]
};
module.exports=export_html;
看plugins這裡
//new一個模板出來,這一個不使用chunks
new htmlwebpackplugin({
template: `./app/home.html`,
filename: `home1.html`,// 會生成home1.html
}),
//new一個模板出來
new htmlwebpackplugin({
template: `./app/home.html`,
filename: `home2.html`,//會生成home2.html
chunks : [`main`],//注意:chunks裡面的值是對應entry入口的鍵名來的
chunksSortMode: `manual`,
})
app目錄下的home.html檔案
_build目錄下的home1.html檔案
_build目錄下的home2.html檔案
可以看到,home1.html引入了兩個js檔案,而且main1.js排在main.js前面,
而home2.html,只引入了指定的main.js;
在home2.html的chunks加上:main1
//new一個模板出來
new htmlwebpackplugin({
template: `./app/home.html`,//入口檔案
filename: `home2.html`,//產出檔案
chunks : [`main`,"main1"],//可以設定chunks按需引入JS檔案,不設定就會引入所有產出的js
chunksSortMode: `manual`,//將chunks按引入的順序排序,不用這個的話,引入到html的JS可能是錯亂排序的
})
因為chunks裡,main在main1之前,所以引入的檔案也是按照這個順序來的;
順序的問題主要歸功於:這一條屬性
chunksSortMode: `manual`,//將chunks按引入的順序排序,不用這個的話,引入到html的JS可能是錯亂排序的
更進一步:
每次都這樣new很麻煩,故而寫個函式簡化過程
let get_html = function(name,chunk){//封裝
return {
template: `./app/ejs for html/`+ name + `.ejs`,
filename: name+ `.html`,
chunks : [`main`,chunk||name],//可以設定chunks按需引入JS檔案,不設定就會引入所有產出的js
chunksSortMode: `manual`,//將chunks按引入的順序排序
inject : true,
hash : true,
xhtml : true
}
};
然後在plugin裡面new一個測試一下;
此時,webpack.config.js:
const path = require(`path`);
let htmlwebpackplugin = require(`html-webpack-plugin`);//引入html-webpack-plugin外掛
let get_html = function(name,chunk){//封裝
return {
template: `./app/`+ name + `.html`,
filename: name+ `.html`,
chunks : [`main`,chunk||null],//這裡引入公共檔案main.js,另外一個檔案按需引入,當然也可以把這個的值設為陣列,傳入function的第二個值用陣列就行
chunksSortMode: `manual`,//將chunks按引入的順序排序
inject : true,//所有JavaScript資源插入到body元素的底部
hash : true,//避免快取
xhtml : true //規範html書寫
}
};
let export_html= {
entry: {
main:__dirname+"/app/js/main.js",//入口檔案
main1:__dirname+"/app/js/main1.js",//入口檔案
},
output: {
path: __dirname+"/_build/",
filename: "js/[name].js",//產出檔案,name根據entry的入口檔案鍵名定
},
module: {
loaders: [
{
test: /(.jsx|.js)$/,
loader: `babel-loader`,
query: {
presets: [`es2015`]
}
},
]
}
,
plugins: [
//new一個模板出來測試一下
new htmlwebpackplugin(get_html("home","main1"))
]
};
module.exports=export_html;
結果:
成功!
本文作者:qiangdada
本文釋出時間:2018/03/22
本文來自雲棲社群合作伙伴開源中國,瞭解相關資訊可以關注oschina.net網站。
相關文章
- 【webpack 系列】進階篇Web
- 帶你深度解鎖Webpack系列(進階篇)Web
- web前端進階篇(二) 瀏覽器 WebpackWeb前端瀏覽器
- webpack4之高階篇Web
- React進階篇1React
- React進階篇2React
- 進階篇_vector容器
- vue + typescript 進階篇VueTypeScript
- dns配置高階篇(轉)DNS
- 樹莓派-進階篇樹莓派
- 介面測試進階篇
- 《MySQL 進階篇》二十:鎖MySql
- webpack – babel 篇WebBabel
- webpack - babel 篇WebBabel
- web前端進階篇(一 )JSWeb前端JS
- 【資料庫】Redis進階篇資料庫Redis
- Android面試題——進階篇Android面試題
- python網路進階篇Python
- Nginx--進階篇(實踐)Nginx
- c-指標進階篇指標
- 進階篇_STL中的容器
- MySQL進階SELECT篇(轉)MySql
- fx 框架上手 - 進階篇框架
- Java進階篇 設計模式之十四 ----- 總結篇Java設計模式
- HTML篇HTML
- Java面試題中高階進階(JVM篇01)Java面試題JVM
- 網管平臺(進階篇):網管軟體的配置方式
- [ webpack4 ] 配置屬於自己的打包系統教程(最終篇)—— 環境配置篇Web
- 自定義View事件篇進階篇(三)-CoordinatorLayout與BehaviorView事件
- phper 的進階思考——請教篇PHP
- go 單元測試進階篇Go
- [ ES6 ] 進階篇(一) —— PromisePromise
- Dagger2進階篇(二)
- iOS逆向之旅(進階篇) — 工具(LLDB)iOSLLDB
- iOS逆向之旅(進階篇) — HOOK(FishHook)iOSHook
- ElasticSearch必知必會-進階篇Elasticsearch
- 《MySQL 進階篇》二十一:MVCCMySqlMVC
- 《MySQL 進階篇》十四:效能分析工具MySql