背景
在公司的主要工作是组件库(基于vue的ui组件库,类似element-ui)的开发,也已经有两个多月,期间一直觉得项目的开发构建太慢,每次开发打开开发环境需要 40s 左右,简直不能忍。前前后后尝试了各种优化手段,但是都不理想。终于在今天,找到了问题所在,构建速度提升了 50% 以上,现在只需要 17s 左右,整个心情都好了。现在记录一下所用到的各种优化手段,因为是开发环境,所以只考虑构建速度。
各种配置项的优化
主要是对一些loader添加 include exclude之类的小优化,其实这一点并没有带来多少性能的提升,只是一些安慰作用吧。
引入happypack
之前有看到相关文章介绍 happypack 采用多线程处理,能大大提升项目的构建速度。嗯,我觉得这个靠谱。看了下github上的文档,赶紧试试水。
修改webpack一些loader配置,使用happypack
// config.dev.js { // ... module: { rules: [{ test: /\.vue$/, loader: 'vue-loader', options: { // 这里估计是都懒得写lang='scss' css: 'style-loader!css-loader!sass-loader', // vue文件中基本不存在css代码,所以只把js交给happypack处理 js: 'happypack/loader?id=babel' } }, { test: /\.js$/, use: 'happypack/loader?id=babel', exclude: /node_modules/, // components目录是组件,examples目录主要是markdown文档,test目录是单元测试 include: [utils.resolve('./components'), utils.resolve('./examples'), utils.resolve('./test')] }, { test: /\.scss$/, use: 'happypack/loader?id=scss' }] }, plugins: [ new HappyPack({ id: 'babel', threads: 4, loaders: ['babel-loader'] }), new HappyPack({ id: 'scss', threads: 4, loaders: [ 'style-loader', 'css-loader', { loader: 'postcss-loader', options: { config: { path: utils.resolve('./postcss.config.js') } } }, 'sass-loader' ] }) ] // ... }
这里主要将组件库中各种需要处理的文件都采用happypack处理,除了上面的 js scss vue 之外,也把 md (vue-markdown-loader)等进行处理,配置都差不多,就不列出来了。
ok,配置完毕,赶紧跑起来试试水。结果就是报错了... oh no! 看了下官方文档说明,不支持 vue-markdown-loader。好吧,把 md 文件的处理改回去,再跑。嗯这次跑起来了,但是时间也就少了 4s-5s 左右,emmmmm,并没想象中多。
将运行的命令加上--progress能发现,主要耗时的就是处理 md 文件,很明显一遇到 md 文件进度条的跳动就慢下来了。
知道了,优化的主要目标应该是md文件的处理。
找到了 build/util.js
里面的一些处理,部分代码如下
内容版权声明:除非注明,否则皆为本站原创文章。