一 配置环境:
开发,测试,线上
二 build.js
base文件是所有环境都会有的配置,基本都是loader。
module.export 暴漏出来的是都是对象,用merge把各个环境的配置进行合并。
test文件是用来打包测试用例代码,不是业务代码。
ora是显示打包进步条
rm是删除文件夹
path是路径
chalk是打包时的各种颜色字体
三 plugins(使用webpack.XX,都是webpack自带方法)
1 webpack.DefinePlugin 在业务代码里 ,在此插件里配置可以在业务环境中想使用的变量:
eg: 使用 process.env获取环境
2 webpack.HashedModuleIdsPlugin 用hash标识文件是否更改
使用hash的时候,只修改app.js文件,所有文件的hash,包括第三方包都会改变,使用 chunkhash避免这个问题。
webpack.HashedModuleIdsPlugin, 保持第三方库的hash稳定,不会随着模块的更改减少而改变。
3 webpack.NoEmitOnerrorsPlugin 打包时生成的错误,不会影响打包进度
4 webpack.ProvidePlugin 提供全局插件,多个页面使用同一个插件时,就不需要多次定义,全局定义一次
eg: new webpack.ProvidePlugin({
'$': 'jquery'
}) 全局引入后,可以直接使用
5 copy-webpck-plugin 拷贝文件夹(不自带)
webpack只会把它处理的资源放到打包文件dist里,有时候需要一些没使用的文件,一起打包进去,就可以使用这个文件,一起打包。
四 优化
webpack3到webpack4进化了什么?
webpack4理念是:0配置打包,简化了很多东西。
1 增加mode模式,指定当前模式。可以根据mode: process.env == 'production' ? '': ''
2 webpack3中需要配置插件进行代码分割,webpack4只需要配置一个字段。
打包速度优化:(webpack打包时间是根据模块的数量及操作的数量决定。)
先处理好第三方模块,再次打包的时候不再处理这些模块
1 Dll优化
概念: webpack.dll.js 先把第三方文件打包进去,配置和webpack一样。
不使用这个plugin,会生成一个js文件,使用的作用是把打包文件生成一个json文件,
需要output里的library的name和plugins里的 DllPlugin里面的name一样,否则会出错。
打包好第三放模块后需要通知到webpack.config.js, 使用webpack.DllReferencePlugin
2 HappyPack(需额外下载)
js 是单线程,node有开多线程的能力,用多个node进行打包
用happypack代替loader使用
happyThreadPool 开启几个线程池,可根据电脑的cpu数量决定。
可以代替任何loader(css-loader等),需要重新写一个。
想代替哪个loader就写哪个。但happypack有时候不会加快速度,当项目中对应处理的文件很少,例如只有很少的css文件,不建议用happypack代替css-loader,反而增加打包成本。
五 解决问题归纳
1 loader 用来处理相应后缀的文件,webpack只认识js文件,针对文件
2 plugin 是针对功能
插件的原理:基于一个生命周期监听,(webpack的生命周期有20多个)
const myPlugin = require('./myPlugin')
new myPlugin()
3 用函数解决问题
eg:如果有多个入口文件,可以写个函数。