webpack编译加速
作者:edwin
日期:2018-05-24 14:53:24
所属分类:前端 - javascript

项目中使用vuejs, 随着页面越来越多,编译速度越来越慢,不得不提升一下,提升总结如下:

babel-loader

.开启cache

module: { rules: [
    {
      test: /\.js$/,
      loader: ['babel-loader?cacheDirectory=true']
    },
    // ... 其他loader
  ]
}

webpack

1. 开启cache

module.exports = {
  cache: true,
  // ... 其他配置
}
2. 配置别名,让编译器更快找到相应的文件
resolve: {
  //... 其他配置
  modules: [path.resolve(__dirname, '../../node_modules')], // node_modules文件夹所在的位置取决于跟webpack.base.conf.js相对的路径
  alias: {
    //... 其他配置
    api: path.resolve(__dirname, '../../server/api') // api文件所在的位置取决于跟webpack.base.conf.js相对的路径,在项目中会自动转换跟项目文件的相对路径
    //... 其他配置
  }
}
3. 解析js时需要的目录, 避免过度编译
{
    test: /\.js$/,
    loader: 'happypack/loader?id=js',
    include: [path.join(__dirname, '..', 'asset')],
    exclude: file => (
      /node_modules/.test(file) &&
      !/\.vue\.js/.test(file)
    )
  }
4. 提取公用模块
plugins: [
  new webpack.optimize.CommonsChunkPlugin({
    async: 'shared-module',
    minChunks: (module, count) => (
      count >= 2    // 当一个模块被重复引用2次或以上的时候单独打包起来。 
    )
  }),

  //...
]
5. 预编译第三方代码块

使用DllPlugin和DllReferencePlugin预编译


6. 启用多进程

先安装npm install happypack --save-dev

const os = require('os');
const HappyPack  = require('happypack');
const happThreadPool = HappyPack.ThreadPool({size: os.cpus().length});

//...
module.exports = {
  plugins: [
    // ...
    new HappyPack({
      id: 'js',
      loaders: ['babel-loader?cacheDirectory=true'],
      threadPool: happThreadPool,
      debug: true
    })
  ],
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
            js: 'happypack/loader?id=js'
          }
        }
      },
      {
        test: /\.js$/,
        loader: ['happypack/loader?id=js']
        // ...
      },
      //...
    ]
  }
}

7. webpack-uglify-parallel并行压缩js代码

npm install webpack-uglify-parallel --save-dev

const UglifyJsparallelPlugin = require('webpack-uglify-parallel');
const os = require('os');

// ... 其他配置
plugins: []
new UglifyJsparallelPlugin({
  workers: os.cpus().length,
  mangle: true,
  compressor: {
    warnings: false,
    drop_console: true,
    drop_debugger: true
  }
})



评论

全部评论 / 0