Notes

Webpack 构建速度优化

Loader

一个基本的 loader 配置

module.exports = {
  module: {
    rules: [
      {
        test: /.js$'/,
        use: ['babel-loader?cacheDirectory'],
        include: path.resolve(__dirname, 'src'),
      }
    ],
  },
};

优化方向

resolve.modules

优化方向

module.exports = {
  resolve: {
    modules: [path.resolve(__dirname, 'node_modules')],
  },
}

resolve.mainFields

对于第三方库,在它们的 package.json 中就有指明对于不同平台的入口文件

{
	"browser": "xxx.js",
  "main": "yyy.js",
}

对于模块运行的平台 target 与 resolve.mainFields 的对应关系是

优化方向

module.exports = {
  resolve: {
    mainFields: ['main'],
  }
}

resolve.alias

部分第三方库中,可能包含了两套功能相同的代码,原因可能由于模块化的方法不同,已经编译好的压缩代码

优化方向

module.exports = {
  resolve: {
    alias: {
      'react': path.resolve(__dirname, './node_modules/react/dist/react.min.js'),
    },
  },
}

这里直接指定了 React 代码的路径,此为生产环境中使用的代码

注意的是,此优化方法适用与整体性较强的代码,即模块中的代码,少了任何一部分都会导致不正常工作。对于工具类库,如 lodash, 当中包含了许多工具类函数,这些函数之间的关联性实际上并不强,就不合适使用此优化方法

resolve.extensions

优化方向

module.noParse

使 Webpack 忽略没有采用模块化的文件的解析处理,提高构建性能

优化方向

module.exports = {
  module: {
    noParse: [Regex1, Regex2, ...],
  },
}

注意