Webpack 实践技巧与建议

Webpack 2与Webpack 1相比其API发生了较大变化,本文提及的不少技巧可能在Webpack 2并不能起作用。 2017-05-02 16:29:11 Webpack技巧建议 程序员如何在当今就业市场中让自己脱颖而出 俗话说,钱不是万能的,但没有钱是万万不能的。可见钱对于生活的重要性。不管你从事什么职业,实现财务自由才能让你无所畏惧地应对挑战。但是还有一点是值得开发人员所关注的:如何脱颖而出与众不同。 2017-05-02 14:40:20 程序员 我是如何用CSS绘制各种形状的 实现方式是通过border-radius这个属性;border-radius它可以单独指定水平和垂直半径。用 / 分隔这两个值。并且该属性的值不仅可以接受长度值,还能接收百分比的值。百分比的值会基于元素的尺寸进行解析,宽是水平半径的解析,高是垂直半径的解析。

Webpack 2与Webpack 1相比其API发生了较大变化,本文提及的不少技巧可能在Webpack 2并不能起作用。

[[190096]]

基于组件的设计工作流与界面抽象基于组件的设计工作流与界面抽象基于组件的设计工作流与界面抽象本文是笔者在使用Webpack的过程中总结的一系列建议与技巧,不过需要注意的是这些小技巧都是关于Webpack 1的。Webpack 2与Webpack 1相比其API发生了较大变化,本文提及的不少技巧可能在Webpack 2并不能起作用。如果你想了解从Webpack 1迁移到Webpack 2的详细教程,可以参考这里,另外可以参考笔者的基于Webpack 2的模板 Webpack2-React-Redux-Boilerplate。

进度反馈

可以在使用Webpack的时候添加如下选项:

  1. --progress--colors

压缩

可以在进行生产环境构建时添加-p选项:

  1. webpack-p

多模块分割

在设置output的文件名时可以使用[name].js多匹配名,如下的例子会生成a.js与b.js:

  1. module.exports={
  2. entry:{
  3. a:'./a',
  4. b:'./b'
  5. },
  6. output:{filename:'[name].js'}
  7. }

如果你担心代码重复的问题,可以使用CommonsChunkPlugin来抽取出多个输出文件的公共代码:

  1. plugins:[newwebpack.optimize.CommonsChunkPlugin('init.js')]
  2. <scriptsrc='init.js'></script>
  3. <scriptsrc='a.js'></script>

分割应用于渲染代码

同样是使用CommonsChunkPlugin来讲公共的渲染代码移动到vendor.js中:

  1. varwebpack=require('webpack')
  2. module.exports={
  3. entry:{
  4. app:'./app.js',
  5. vendor:['jquery','underscore',...]
  6. },
  7. output:{
  8. filename:'[name].js'
  9. },
  10. plugins:[
  11. newwebpack.optimize.CommonsChunkPlugin('vendor')
  12. ]
  13. }

其工作流程如下,具体可以参考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:

  1. constDEBUG=process.env.NODE_ENV!=='production'
  2. module.exports={
  3. debug:DEBUG?true:false,
  4. devtool:DEBUG?'cheap-module-eval-source-map':'hidden-source-map'
  5. }

在Chrome Devtools你可以在webpack:///foo.js?a93h路径下查看文件,也可以选择自定义配置:

  1. output:{
  2. devtoolModuleFilenameTemplate:'webpack:///[absolute-resource-path]'
  3. }

CSS

作者正在编辑中,请过几日回来查看。

开发模式

如果你希望在仅仅在开发模式下开启某些选项:

  1. constDEBUG=process.env.NODE_ENV!=='production'
  2. module.exports={
  3. debug:DEBUG?true:false,
  4. devtool:DEBUG?'cheap-module-eval-source-map':'hidden-source-map'
  5. }

这个时候你需要注意在编译生产环境版本时使用如下命令:env NODE_ENV=production webpack -p

包体组成分析

如果你觉得你的包体有点匪夷所思的大并且想具体了解到底是哪个模块占据了大量的提及,可以使用webpack-bundle-size-analyzer:

  1. $yarnglobaladdwebpack-bundle-size-analyzer
  2. $./node_modules/.bin/webpack--json|webpack-bundle-size-analyzer
  3. jquery:260.93KB(37.1%)
  4. moment:137.34KB(19.5%)
  5. parsleyjs:87.88KB(12.5%)
  6. bootstrap-sass:68.07KB(9.68%)
  7. ...

优化React包体

React在开发模式下会自带开发工具,而我们希望在生产环境下能够移除该工具从而减少包体,我们可以通过如下配置:

  1. plugins:[
  2. newwebpack.DefinePlugin({
  3. 'process.env':{
  4. 'NODE_ENV':JSON.stringify(process.env.NODE_ENV||'development')
  5. }
  6. })
  7. ]

优化Lodash

Lodash是非常不错的工具库,不过很多时候我们仅需要其一小部分功能,此时lodash-webpack-plugin就派上了用场:

  1. constLodashModuleReplacementPlugin=require('lodash-webpack-plugin');
  2. constconfig={
  3. plugins:[
  4. newLodashModuleReplacementPlugin({
  5. path:true,
  6. flattening:true
  7. })
  8. ]
  9. };

引用某个文件夹中的所有文件

如果你希望达到如下的效果:

  1. require('./behaviors/*')/*Doesn'twork!*/

你需要使用require.context:

// http://stackoverflow.com/a/30652110/873870

  1. functionrequireAll(r){r.keys().forEach(r)}
  2. requireAll(require.context('./behaviors/',true,/\.js$/))s

【本文是清一色专栏作者“张梓雄 ”的原创文章,如需转载请通过清一色与作者联系】

戳这里,看该作者更多好文

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月4日 22:57
下一篇 2023年5月4日 22:58

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信