今天学习的是压缩代码章节,原文连接:webpack2javascript
在 webpack.config.js 中配置css
const productionConfig = merge([ { performance: { hints: 'warning', // 'error' or false are valid too maxEntrypointSize: 100000, // in bytes maxAssetSize: 450000, // in bytes }, }, ... ]);
上述配置限制了bundles的entry和asset的文件大小,若是超过设置值,构建将报错并取消build过程,不然报错不会出现而且build成功。java
压缩代码的目的是将代码体积变小一些。压缩代码的靠谱方式就是重写的同时不会致使代码(功能)失效,好的方式好比:对变量重命名和删除无效代码段。webpack
我么可使用webpack -p
即 --optimize-minimize
来压缩代码,这个命令的底层调用的 UglifyJsPlugin 插件,因为_UglifyJS _不支持ES6语法,针对浏览器使用 _Babel _ 和 babel-preset-env 的状况下仍是会出问题,所以咱们须要另辟蹊径了。web
babili是由_babel_团队维护的一个压缩器(minifier)--支持ES6甚至更新的特性,在webpack中咱们能够经过 babili-webpack-plugin来运用该工具。npm
npm下载该插件浏览器
npm install babili-webpack-plugin --save-dev
在_webpack.parts.js_中定义该插件使用babel
const BabiliPlugin = require('babili-webpack-plugin'); ... exports.minifyJavaScript = () => ({ plugins: [ new BabiliPlugin(), ], });
该插件功能强大,可是咱们只须要能切换source map就足够了。接下来咱们在_webpack.config.js_中应用上面的插件定义:工具
const productionConfig = merge([ ... parts.clean(PATHS.build), parts.minifyJavaScript(), ... ]);
鉴于该插件的使用致使了更多的工做,因此构建时间更长,可是好处是明显的:性能预算中的超出size大小的限制取消了,而且构建出的bundle体积减少了许多。更过设置能够参考_babili-webpack-plugin_ 和Babili 官方文档,其中包含注释代码的配置项。性能
其中_ optimize-css-assets-webpack-plugin_是这几个里面的最好方案。首先下载该插件:
npm install optimize-css-assets-webpack-plugin cssnano --save-dev
在_webpack.parts.js_中定义该插件的配置:
... const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const cssnano = require('cssnano'); ... exports.minifyCSS = ({ options }) => ({ plugins: [ new OptimizeCSSAssetsPlugin({ cssProcessor: cssnano, cssProcessorOptions: options, canPrint: false, }), ], });
在_webpack.config.js_中使用该插件的定义:
const productionConfig = merge([ ... parts.minifyJavaScript(), parts.minifyCSS({ options: { discardComments: { removeAll: true, }, // Run cssnano in safe mode to avoid // potentially unsafe transformations. safe: true, }, }), ... ]);
跑一下npm run build,css体积变小了