11.3.1 弹射和配置webpack
您可以在百度里搜索“深入浅出React和Redux 艾草文学(www.321553.xyz)”查找最新章节!
11.3.1 弹射和配置webpack
为了实现代码分片,我们需要直接操作webpack的配置文件,所以不能再使用create-react-app产生的默认配置,首先我们要让应用从create-react-app制造的“安全舱”里弹射出来,在命令行执行下列命令完成“弹射”:
npm run eject
“弹射”是不可逆的操作,上面的命令会要求你确认是否下了决心。当然,为了配置webpack我们别无选择,只能确认。
在命令行中这个命令完成的时候,会发现应用目录下多了scripts和config两个目录,分别包含脚本和配置文件,同时应用目录下的package.json文件也发生了变化,包含了更多的内容,至此,“弹射”完成,但是功能和“弹射”之前别无二致,要改进功能还需要手工修改一些文件。
有两个webpack配置,分别代表开发环境和产品环境,我们首先处理开发模式也就是npm start命令启动的模式下的webpack配置。
我们打开config/webpack.config.dev.js,找到给module.exports赋值的语句,在给module.exports赋值的对象中,找到output这个字段,在其中添加上关于chunkFilename的一行。然后找到plugins字段,这是一个数组,在里面添加一个元素增加Commons-ChunkPlugin,代码修改如下:
module.exports = {
...
output: {
...
chunkFilename: 'static/js/[name].chunk.js',
...
}
plugins: [
...
new webpack.optimize.CommonsChunkPlugin('common', 'static/js/common.js'),
]
}
增加的output配置,是告诉webpack给每个分片都产生一个文件,文件名包含模块名和后缀“.chunk.js”,使用这样的后缀只是一个通用习惯,并不是强制要求,如果改成“.page.js”之类也不影响功能。
增加在plugins中的配置是告诉webpack把所有分片中共同的代码提取出来,放在名为common.js的文件中,也就是图11-5中存储所有分片共同代码的common.js。
生成的文件都带上前缀路径static/js,只是为了保持和原有的bundle.js文件所在目录一致,其实这个目录也可以是任意一个位置。
上面的修改只针对开发模式,还要修改产品模式的webpack配置保持一致。
打开config/webpack.config.prod.js文件,这个文件定义的是产品模式下的webpack配置,不过在config/webpack.config.prod.js中的output已经有了正确的chunkFileName配置,所以只需要在plugins中添加下面一行就行:
new webpack.optimize.CommonsChunkPlugin('common', 'static/js/common.[chunkhash:8].js')
产品环境的配置和开发环境有些不同,多出了[chunkhash:8]的部分,这是为了让浏览器缓存在文件内容改变时失去效果。
因为产品环境下打包的文件部署出去之后预期会被浏览器长时间缓存,所以不能使用固定的文件名,否则后续部署的代码更新无法被浏览器发现。所以每个文件名都会包含一个8位的根据文件内容产生的哈希结果,这样当文件内容发生改变时,文件名也就发生了变化,对应文件的URL也就发生了变化,浏览器就会去下载最新的JavaScript打包资源。 深入浅出React和Redux