博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Webpack 实践技巧与建议
阅读量:4085 次
发布时间:2019-05-25

本文共 2739 字,大约阅读时间需要 9 分钟。

https://zhuanlan.zhihu.com/p/24548701?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

翻译自,从属于笔者的。如果想了解更多的编程技术体系概况可以参考,如果想及时了解一周优秀外文资料可以参考。

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

进度反馈

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

--progress --colors

压缩

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

webpack -p

多模块分割

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

module.exports = {  entry: {    a: './a',    b: './b'  },  output: { filename: '[name].js' }}

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

plugins: [ new webpack.optimize.CommonsChunkPlugin('init.js') ]

分割应用于渲染代码

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

var webpack = require('webpack')module.exports = {  entry: {    app: './app.js',    vendor: ['jquery', 'underscore', ...]  },  output: {    filename: '[name].js'  },  plugins: [    new webpack.optimize.CommonsChunkPlugin('vendor')  ]}

其工作流程如下,具体可以参考:

  • 添加vendor入口并且指定关联库

  • CommonsChunkPlugin会从app.js中移除相关库

  • CommonsChunkPlugin 同样会把Webpack的运行时依赖迁移到vendor.js中

Source Maps

目前最流行的Source Maps选项是cheap-module-eval-source-map,这个工具会帮助开发环境下在Chrome/Firefox中显示源代码文件,其速度快于source-map与eval-source-map:

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你可以在webpack:///foo.js?a93h路径下查看文件,也可以选择自定义配置:

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'}

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

包体组成分析

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

$ yarn global add webpack-bundle-size-analyzer$ ./node_modules/.bin/webpack --json | webpack-bundle-size-analyzerjquery: 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')    }  })]

优化Lodash

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

const LodashModuleReplacementPlugin = require('lodash-webpack-plugin');const config = {  plugins: [    new LodashModuleReplacementPlugin({      path: true,      flattening: true    })  ]};

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

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

require('./behaviors/*') /* Doesn't work! */

你需要使用require.context:

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

延伸阅读:

转载地址:http://anhni.baihongyu.com/

你可能感兴趣的文章
乘法逆元
查看>>
STL源码分析----神奇的 list 的 sort 算法实现
查看>>
Linux下用math.h头文件
查看>>
Linux中用st_mode判断文件类型
查看>>
Ubuntu修改host遇到unable to resolve host
查看>>
路由选择算法
查看>>
Objective-C 基础入门(一)
查看>>
Objective-C 基础入门(三) 读写文件与回调
查看>>
C++ STL标准库与泛型编程(一)概述
查看>>
C++ STL标准库与泛型编程(四)Deque、Queue、Stack 深度探索
查看>>
C++ STL标准库 算法
查看>>
JVM内存模型_Minor GC笔记
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Linux下安装Python环境并部署NLP项目
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
Nginx篇-Nginx配置动静分离
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
缓存篇-使用Redis进行分布式锁应用
查看>>
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>