基于webpack.config.js 參數(shù)詳解
webpack.config.js文件通常放在項目的根目錄中,它本身也是一個標(biāo)準(zhǔn)的Commonjs規(guī)范的模塊。
var webpack = require('webpack');
module.exports = {
entry: [
'webpack/hot/only-dev-server',
'./js/app.js'
],
output: {
path: './build',
filename: 'bundle.js'
},
module: {
loaders: [
{ test: /\.js?$/, loaders: ['react-hot', 'babel'], exclude: /node_modules/ },
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'},
{ test: /\.css$/, loader: "style!css" },
{test: /\.less/,loader: 'style-loader!css-loader!less-loader'}
]
},
resolve:{
extensions:['','.js','.json']
},
plugins: [
new webpack.NoErrorsPlugin()
]
};
1.entry
entry可以是個字符串或數(shù)組或者是對象。
當(dāng)entry是個字符串的時候,用來定義入口文件:
entry: './js/main.js'
當(dāng)entry是個數(shù)組的時候,里面同樣包含入口js文件,另外一個參數(shù)可以是用來配置webpack提供的一個靜態(tài)資源服務(wù)器,webpack-dev-server。webpack-dev-server會監(jiān)控項目中每一個文件的變化,實時的進(jìn)行構(gòu)建,并且自動刷新頁面:
entry: [ 'webpack/hot/only-dev-server', './js/app.js'
當(dāng)entry是個對象的時候,我們可以將不同的文件構(gòu)建成不同的文件,按需使用,比如在我的hello頁面中只要\引入hello.js即可:
entry: {
hello: './js/hello.js',
form: './js/form.js'
}
2.output
output參數(shù)是個對象,用于定義構(gòu)建后的文件的輸出。其中包含path和filename:
output: {
path: './build',
filename: 'bundle.js'
}
當(dāng)我們在entry中定義構(gòu)建多個文件時,filename可以對應(yīng)的更改為[name].js用于定義不同文件構(gòu)建后的名字。
3.module
關(guān)于模塊的加載相關(guān),我們就定義在module.loaders中。這里通過正則表達(dá)式去匹配不同后綴的文件名,然后給它們定義不同的加載器。比如說給less文件定義串聯(lián)的三個加載器(!用來定義級聯(lián)關(guān)系):
module: {
loaders: [
{ test: /\.js?$/, loaders: ['react-hot', 'babel'], exclude: /node_modules/ },
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'},
{ test: /\.css$/, loader: "style!css" },
{ test: /\.less/, loader: 'style-loader!css-loader!less-loader'}
]
}
此外,還可以添加用來定義png、jpg這樣的圖片資源在小于10k時自動處理為base64圖片的加載器:
{ test: /\.(png|jpg)$/,loader: 'url-loader?limit=10000'}
給css和less還有圖片添加了loader之后,我們不僅可以像在node中那樣require js文件了,我們還可以require css、less甚至圖片文件:
require('./bootstrap.css');
require('./myapp.less');
var img = document.createElement('img');
img.src = require('./glyph.png');
但是需要知道的是,這樣require來的文件會內(nèi)聯(lián)到 js bundle中。如果我們需要把保留require的寫法又想把css文件單獨拿出來,可以使用下面提到的[extract-text-webpack-plugin]插件。
在上面示例代碼中配置的第一個loaders我們可以看到一個叫做react-hot的加載器。我的項目是用來學(xué)習(xí)react寫相關(guān)代碼的,所以配置了一個react-hot加載器,通過它,可以實現(xiàn)對react組件的熱替換。我們已經(jīng)在entry參數(shù)中配置了webpack/hot/only-dev-server,所以我們只要在啟動webpack開發(fā)服務(wù)器時開啟–hot參數(shù),就可以使用react-hot-loader了。在package.json文件中這樣定義:
"scripts": {
"start": "webpack-dev-server --hot --progress --colors",
"build": "webpack --progress --colors"
}
4.resolve
webpack在構(gòu)建包的時候會按目錄的進(jìn)行文件的查找,resolve屬性中的extensions數(shù)組中用于配置程序可以自行補(bǔ)全哪些文件后綴:
resolve:{
extensions:['','.js','.json']
}
然后我們想要加載一個js文件時,只要require(‘common')就可以加載common.js文件了。
6.externals
當(dāng)我們想在項目中require一些其他的類庫或者API,而又不想讓這些類庫的源碼被構(gòu)建到運行時文件中,這在實際開發(fā)中很有必要。此時我們就可以通過配置externals參數(shù)來解決這個問題:
externals: {
"jquery": "jQuery"
}
這樣我們就可以放心的在項目中使用這些API了:var jQuery = require(“jquery”);
7.context
當(dāng)我們在require一個模塊的時候,如果在require中包含變量,像這樣:
require("./mods/" + name + ".js");
那么在編譯的時候我們是不能知道具體的模塊的。但這個時候,webpack也會為我們做些分析工作:
1.分析目錄:'./mods';
2.提取正則表達(dá)式:'/^.*.js$/';
于是這個時候為了更好地配合wenpack進(jìn)行編譯,我們可以給它指明路徑,像在cake-webpack-config中所做的那樣(我們在這里先忽略abcoption的作用):
var currentBase = process.cwd(); var context = abcOptions.options.context ? abcOptions.options.context : path.isAbsolute(entryDir) ? entryDir : path.join(currentBase, entryDir);
以上這篇基于webpack.config.js 參數(shù)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript如何將后端獲取到的byte數(shù)組轉(zhuǎn)為文件
這篇文章主要給大家介紹了關(guān)于JavaScript如何將后端獲取到的byte數(shù)組轉(zhuǎn)為文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-04-04
bootstrap paginator分頁插件的兩種使用方式實例詳解
Bootstrap Paginator是一款基于Bootstrap的js分頁插件,下面通過本文給大家介紹bootstrap paginator分頁插件的兩種使用方式,一起看看吧2017-11-11

