主题
webpack 相关
1. 打包体积 优化思路
- 提取第三⽅库或通过引用外部⽂件的⽅式引⼊第三⽅库
- 代码压缩插件
UglifyJsPlugin - 服务器启用 gzip 压缩
- 按需加载资源⽂件
require.ensure - 优化
devtool中的source-map - 剥离
css⽂件, 单独打包 - 去除不必要插件, 通常就是开发环境与生产环境用同⼀套配置⽂件导致
2. 打包效率
- 开发环境采用增量构建,启用热更新
- 开发环境不做无意义的工作如提取
css计算文件 hash 等 - 配置
devtool - 选择合适的
loader - 个别
loader开启cache如babel-loader - 第三方库采用引⼊方式
- 提取公共代码
- 优化构建时的搜索路径 指明需要构建目录及不需要构建目录
- 模块化引⼊需要的部分
3. Loader
loader 就是⼀个 node 模块, 它输出了⼀个函数 。当某种资源需要用这个 loader 转换时, 这个函数会被调用 。并且, 这个函数可以通过提供给它的 this 上下文访问 Loader API 。 reverse-txt-loader
编写⼀个 loader
js
// 定义
module.exports = function(src) {
//src是原文件内容 ( abcde),下面对内容进行处理, 这里是反转
var result = src.split( '').reverse().join( '');
//返回JavaScript源码,必须是String或者Buffer
return `module.exports = '${result} '`;
}
//使用
{
test: /\.txt$/,
use: [
{
'./path/reverse-txt-loader'
}
]
}4. 说⼀下 webpack 的⼀些 plugin , 怎么使用 webpack 对项目进行优化
构建优化
- 减少编译体积
ContextReplacementPugin、IgnorePlugin、babel-plugin-import、babel-plugin-transform-runtime - 并行编译
happypack、thread-loader、uglifyjsWebpackPlugin开启并行 - 缓存
cache-loader、hard-source-webpack-plugin、uglifyjsWebpackPlugin开启缓存 、babel-loader开启缓存 - 预编译
dllWebpackPlugin&&DllReferencePlugin、auto-dll-webapck-plugin
性能优化
- 减少编译体积
Tree-shaking、Scope Hositing hash缓存webpack-md5-plugin- 拆包
splitChunksPlugin、import()、require.ensure
