Webpack 2与Webpack 1相比其API发生了较大变化,本文提及的不少技巧可能在Webpack 2并不能起作用。
基于组件的设计工作流与界面抽象基于组件的设计工作流与界面抽象基于组件的设计工作流与界面抽象本文是笔者在使用Webpack的过程中总结的一系列建议与技巧,不过需要注意的是这些小技巧都是关于Webpack 1的。Webpack 2与Webpack 1相比其API发生了较大变化,本文提及的不少技巧可能在Webpack 2并不能起作用。如果你想了解从Webpack 1迁移到Webpack 2的详细教程,可以参考这里,另外可以参考笔者的基于Webpack 2的模板 Webpack2-React-Redux-Boilerplate。
进度反馈
可以在使用Webpack的时候添加如下选项:
- --progress--colors
压缩
可以在进行生产环境构建时添加-p选项:
- webpack-p
多模块分割
在设置output的文件名时可以使用[name].js多匹配名,如下的例子会生成a.js与b.js:
- module.exports={
- entry:{
- a:'./a',
- b:'./b'
- },
- output:{filename:'[name].js'}
- }
如果你担心代码重复的问题,可以使用CommonsChunkPlugin来抽取出多个输出文件的公共代码:
- plugins:[newwebpack.optimize.CommonsChunkPlugin('init.js')]
- <scriptsrc='init.js'></script>
- <scriptsrc='a.js'></script>
分割应用于渲染代码
同样是使用CommonsChunkPlugin来讲公共的渲染代码移动到vendor.js中:
- varwebpack=require('webpack')
- module.exports={
- entry:{
- app:'./app.js',
- vendor:['jquery','underscore',...]
- },
- output:{
- filename:'[name].js'
- },
- plugins:[
- newwebpack.optimize.CommonsChunkPlugin('vendor')
- ]
- }
其工作流程如下,具体可以参考Code Splitting:
- 添加vendor入口并且指定关联库
- CommonsChunkPlugin会从app.js中移除相关库
- CommonsChunkPlugin 同样会把Webpack的运行时依赖迁移到vendor.js中
Source Maps
目前***的Source Maps选项是cheap-module-eval-source-map,这个工具会帮助开发环境下在Chrome/Firefox中显示源代码文件,其速度快于source-map与eval-source-map:
- constDEBUG=process.env.NODE_ENV!=='production'
- module.exports={
- debug:DEBUG?true:false,
- devtool:DEBUG?'cheap-module-eval-source-map':'hidden-source-map'
- }
在Chrome Devtools你可以在webpack:///foo.js?a93h路径下查看文件,也可以选择自定义配置:
- output:{
- devtoolModuleFilenameTemplate:'webpack:///[absolute-resource-path]'
- }
CSS
作者正在编辑中,请过几日回来查看。
开发模式
如果你希望在仅仅在开发模式下开启某些选项:
- constDEBUG=process.env.NODE_ENV!=='production'
- module.exports={
- debug:DEBUG?true:false,
- devtool:DEBUG?'cheap-module-eval-source-map':'hidden-source-map'
- }
这个时候你需要注意在编译生产环境版本时使用如下命令:env NODE_ENV=production webpack -p
包体组成分析
如果你觉得你的包体有点匪夷所思的大并且想具体了解到底是哪个模块占据了大量的提及,可以使用webpack-bundle-size-analyzer:
- $yarnglobaladdwebpack-bundle-size-analyzer
- $./node_modules/.bin/webpack--json|webpack-bundle-size-analyzer
- jquery:260.93KB(37.1%)
- moment:137.34KB(19.5%)
- parsleyjs:87.88KB(12.5%)
- bootstrap-sass:68.07KB(9.68%)
- ...
优化React包体
React在开发模式下会自带开发工具,而我们希望在生产环境下能够移除该工具从而减少包体,我们可以通过如下配置:
- plugins:[
- newwebpack.DefinePlugin({
- 'process.env':{
- 'NODE_ENV':JSON.stringify(process.env.NODE_ENV||'development')
- }
- })
- ]
优化Lodash
Lodash是非常不错的工具库,不过很多时候我们仅需要其一小部分功能,此时lodash-webpack-plugin就派上了用场:
- constLodashModuleReplacementPlugin=require('lodash-webpack-plugin');
- constconfig={
- plugins:[
- newLodashModuleReplacementPlugin({
- path:true,
- flattening:true
- })
- ]
- };
引用某个文件夹中的所有文件
如果你希望达到如下的效果:
- require('./behaviors/*')/*Doesn'twork!*/
你需要使用require.context:
// http://stackoverflow.com/a/30652110/873870
- functionrequireAll(r){r.keys().forEach(r)}
- requireAll(require.context('./behaviors/',true,/\.js$/))s
【本文是清一色专栏作者“张梓雄 ”的原创文章,如需转载请通过清一色与作者联系】
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经