setup
$ npm install webpack --save-dev # 全局安裝依賴
# or
$ npm install webpack-dev-server --save-dev # 安裝webpack調(diào)試工具
basic config
// config/webpack.config.js
const webpack = require('webpack');
// 配置目錄
// 因?yàn)槲覀兊膚ebpack.config.js文件不在項(xiàng)目根目錄下,所以需要一個(gè)路徑的配置
const path = require('path');
const CURRENT_PATH = path.resolve(__dirname); // 獲取到當(dāng)前目錄
const ROOT_PATH = path.join(__dirname, '../'); // 項(xiàng)目根目錄
const MODULES_PATH = path.join(ROOT_PATH, './node_modules'); // node包目錄
const BUILD_PATH = path.join(ROOT_PATH, './public/assets'); // 最后輸出放置公共資源的目錄
module.exports = {
context: path.join(__dirname, '../'), // 設(shè)置webpack配置中指向的默認(rèn)目錄為項(xiàng)目根目錄
entry: {
index: './public/pages/index.js',
public: './public/pages/public.js'
},
output: {
path: BUILD_PATH, // 設(shè)置輸出目錄
filename: '[name].bundle.js', // 輸出文件名
},
resolve: {
extensions: ['', '.js', '.jsx', '.coffee'] // 配置簡(jiǎn)寫(xiě),配置過(guò)后,書(shū)寫(xiě)該文件路徑的時(shí)候可以省略文件后綴
},
module: {
loaders: [
// loader 扔在這里
]
},
plugins: [
// 插件扔在這里
]
}
loaders
//less 、 sacc同理
$ npm install less --save-dev # install less
$ npm install css-loader style-loader --save-dev # install style-loader, css-loader
$ npm install less less-loader --save-dev # 基于style-loader,css-loader
install url loader
//用來(lái)處理圖片和字體文件
$ npm install file-loader --save-dev
$ npm install url-loader --save-dev
install babel loader
//ES6
$ npm install babel-loader babel-core babel-preset-es2015 --save-dev
config loaders
// config/webpack.config.js
module.exports = {
module: {
loaders: [
// style & css & less loader
{ test: /\.css$/, loader: "style-loader!css-loader"},
{ test: /\.less$/, loader: "style-loader!css-loader!less-loader")},
// babel loader
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: ['babel-loader'],
query: {
presets: ['es2015']
// 如果安裝了React的話
// presets: ['react', 'es2015']
}
},
// image & font
{ test: /\.(woff|woff2|eot|ttf|otf)$/i, loader: 'url-loader?limit=8192&name=[name].[ext]'},
{ test: /\.(jpe?g|png|gif|svg)$/i, loader: 'url-loader?limit=8192&name=[name].[ext]'},
]
}
}
plugin
//ExtractTextPlugin分離CSS
# install ExtractTextPlugin
$ npm install extract-text-webpack-plugin --save-dev
// config/webpack.config.js
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module: {
loaders: [
// 把之前的style&css&less loader改為
{ test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader')},
{ test: /\.less$/, loader: ExtractTextPlugin.extract('style', 'css!less') },
]
},
plugins: [
// 分離css
new ExtractTextPlugin('[name].bundle.css', {
allChunks: true
}),
]
設(shè)置jQuery全局變量
$ npm install jquery --save-dev
# 安裝 expose-loader
$ sudo npm install expose-loader --save
// config/webpack.config.js
module: {
loaders: [
// expose-loader將需要的變量從依賴包中暴露出來(lái)
{ test: require.resolve("jquery"), loader: "expose?$! expose?jQuery" }
]
},
plugins: [
// 把jquery作為全局變量插入到所有的代碼中
// 然后就可以直接在頁(yè)面中使用jQuery了
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
}),
]
CommonsChunkPlugin抽取公共資源
// config/webpack.config.js
entry: {
jquery: ['jquery']
},
plugins: [
// public sources
new webpack.optimize.CommonsChunkPlugin({
// 與 entry 中的 jquery 對(duì)應(yīng)
name: 'jquery',
// 輸出的公共資源名稱
filename: 'common.bundle.js',
// 對(duì)所有entry實(shí)行這個(gè)規(guī)則
minChunks: Infinity
}),
]
UglifyJsPlugin代碼壓縮混淆
// config/webpack.config.js
plugins: [
new webpack.optimize.UglifyJsPlugin({
mangle: {
except: ['$super', '$', 'exports', 'require']
//以上變量‘$super’, ‘$’, ‘exports’ or ‘require’眼坏,不會(huì)被混淆
},
compress: {
warnings: false
}
})
]