Webpack 实践技巧与建议
进度反馈可以在使用Webpack的时候添加如下选项: --progress --colors 压缩可以在进行生产环境构建时添加 webpack -p 多模块分割在设置output的文件名时可以使用 module.exports = { entry: { a: './a',b: './b' },output: { filename: '[name].js' } } 如果你担心代码重复的问题,可以使用CommonsChunkPlugin来抽取出多个输出文件的公共代码: plugins: [ new webpack.optimize.CommonsChunkPlugin('init.js') ] <script src='init.js'></script> <script src='a.js'></script> 分割应用于渲染代码同样是使用CommonsChunkPlugin来讲公共的渲染代码移动到 var webpack = require('webpack') module.exports = { entry: { app: './app.js',vendor: ['jquery','underscore',...] },output: { filename: '[name].js' },plugins: [ new webpack.optimize.CommonsChunkPlugin('vendor') ] } 其工作流程如下,具体可以参考Code Splitting:
Source Maps目前最流行的Source Maps选项是 const DEBUG = process.env.NODE_ENV !== 'production' module.exports = { debug: DEBUG ? true : false,devtool: DEBUG ? 'cheap-module-eval-source-map' : 'hidden-source-map' } 在Chrome Devtools你可以在 output: { devtoolModuleFilenameTemplate: 'webpack:///[absolute-resource-path]' } CSS作者正在编辑中,请过几日回来查看。 开发模式如果你希望在仅仅在开发模式下开启某些选项: const DEBUG = process.env.NODE_ENV !== 'production' module.exports = { debug: DEBUG ? true : false,devtool: DEBUG ? 'cheap-module-eval-source-map' : 'hidden-source-map' } 这个时候你需要注意在编译生产环境版本时使用如下命令: 包体组成分析如果你觉得你的包体有点匪夷所思的大并且想具体了解到底是哪个模块占据了大量的提及,可以使用webpack-bundle-size-analyzer: $ yarn global add webpack-bundle-size-analyzer $ ./node_modules/.bin/webpack --json | webpack-bundle-size-analyzer jquery: 260.93 KB (37.1%) moment: 137.34 KB (19.5%) parsleyjs: 87.88 KB (12.5%) bootstrap-sass: 68.07 KB (9.68%) ... 优化React包体React在开发模式下会自带开发工具,而我们希望在生产环境下能够移除该工具从而减少包体,我们可以通过如下配置: plugins: [ new webpack.DefinePlugin({ 'process.env': { 'NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') } }) ] 优化LodashLodash是非常不错的工具库,不过很多时候我们仅需要其一小部分功能,此时lodash-webpack-plugin就派上了用场: const LodashModuleReplacementPlugin = require('lodash-webpack-plugin'); const config = { plugins: [ new LodashModuleReplacementPlugin({ path: true,flattening: true }) ] }; 引用某个文件夹中的所有文件如果你希望达到如下的效果: require('./behaviors/*') /* Doesn't work! */ 你需要使用 // http://stackoverflow.com/a/30652110/873870 function requireAll (r) { r.keys().forEach(r) } requireAll(require.context('./behaviors/',true,/.js$/))s (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |