一、js 文件壓縮css
內置uglifyjs-webpack-pluginhtml
二、css 文件壓縮html5
使用optimie-css-assets-webpack-pluginnode
使用cssnanoreact
modules.exports = {
entry: {
app: './scr/app.js',
search: './src/search.js'
},
output: {
filename: '[name][chunkhash:8].js',
path: __dirname + '/dist'
},
plugins: [
new OptimizeCSSAssetsPlugin({
assetNameRegExp: /\.css$/g,
cssProcessor: require('cssnano')
})
]
}
複製代碼
三、html 文件壓縮 修改html-webpack-plugin, 設置壓縮參數。webpack
module.exports = {
entry: {
app: './src/app.js',
search: './src/search.js'
},
output: {
filename: '[name][chunkhash:8].js',
path: __dirname + '/dist'
},
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src/search.html’),
filename: 'search.html’,
chunks: ['search’],
inject: true,
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false
}
})
]
};
複製代碼
將 react、react-dom 基礎包經過 cdn 引⼊,不打⼊ bundle 中 方法:html-webpack-externals-plugin.web
const HtmlWbpcakExternalsPlugin = require('html-webpack-externals-plugin');
...
plugins: [
new HtmlWebpackExternalsPlugin({
externals: [
{
module: 'react',
entry: '../react',
global: 'React',
},
{
module: 'react',
entry: '../react',
global: 'ReactDom'
}
]
})
]
複製代碼
chunks 參數說明:babel
· async 異步引⼊的庫進⾏分離(默認)markdown
· initial 同步引⼊的庫進⾏分離app
· all 全部引⼊的庫進⾏分離(推薦)
modules.exports = {
optimization: {
splitChunks: {
chunks: 'async',
minSize: 30000,
maxSize: 0,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
}
}
}
}
}
複製代碼
module.exports = {
optimization: {
splitChunks: {
cacheGroups: {
commons: {
test: /(react | react-dom)/,
chunks: 'all'
}
}
}
}
}
複製代碼
minChunks: 設置最小引用次數2
minSize: 分離包最小體積
module.exports = {
optimization: {
splitChunks: {
minSize: 0,
cacheGroups: {
commons: {
name: 'commons',
chunks: 'all',
minChunks: 2
}
}
}
}
}
複製代碼
概念:1 個模塊可能有多個⽅法,只要其中的某個⽅法使⽤到了,則整個⽂件都會被打到bundle ⾥⾯去,tree shaking 就是隻把⽤到的⽅法打⼊ bundle ,沒⽤到的⽅法會在uglify 階段被擦除掉。
webpack配置: webpack 默認⽀持,在 .babelrc ⾥設置 modules: false 便可 production mode的狀況下默認開啓
要求:必須是 ES6 的語法,CJS 的⽅式不⽀持。
利⽤ ES6 模塊的特色:
·只能做爲模塊頂層的語句出現
· import 的模塊名只能是字符串常量
· import binding 是 immutable的