多种配置类型(configuration types)

除了导出单个配置对象,还有一些方式满足其他需求。

导出为一个函数

最终,你会发现需要在开发生产构建之间,消除 webpack.config.js 的差异。(至少)有两种选项:

作为导出一个配置对象的替代,还有一种可选的导出方式是,从 webpack 配置文件中导出一个函数。该函数在调用时,可传入两个参数:

  1. -module.exports = {
  2. +module.exports = function(env, argv) {
  3. + return {
  4. + mode: env.production ? 'production' : 'development',
  5. + devtool: env.production ? 'source-maps' : 'eval',
  6. plugins: [
  7. new TerserPlugin({
  8. terserOptions: {
  9. + compress: argv['optimize-minimize'] // 只有传入 -p 或 --optimize-minimize
  10. }
  11. })
  12. ]
  13. + };
  14. };

导出一个 Promise

webpack 将运行由配置文件导出的函数,并且等待 Promise 返回。便于需要异步地加载所需的配置变量。

  1. module.exports = () => {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve({
  5. entry: './app.js',
  6. /* ... */
  7. });
  8. }, 5000);
  9. });
  10. };

导出多个配置对象

作为导出一个配置对象/配置函数的替代,你可能需要导出多个配置对象(从 webpack 3.1.0 开始支持导出多个函数)。当运行 webpack 时,所有的配置对象都会构建。例如,导出多个配置对象,对于针对多个构建目标(例如 AMD 和 CommonJS)打包一个 library 非常有用。

  1. module.exports = [{
  2. output: {
  3. filename: './dist-amd.js',
  4. libraryTarget: 'amd'
  5. },
  6. name: 'amd',
  7. entry: './app.js',
  8. mode: 'production',
  9. }, {
  10. output: {
  11. filename: './dist-commonjs.js',
  12. libraryTarget: 'commonjs'
  13. },
  14. name: 'commonjs',
  15. entry: './app.js',
  16. mode: 'production',
  17. }];

If you pass a name to --config-name flag, webpack will only build that specific configuration.


贡献人员

EugeneHlushko EugeneHlushko byzyk byzyk dhurlburtusa dhurlburtusa fadysamirsadek fadysamirsadek kbariotis kbariotis simon04 simon04 skipjack skipjack sokra sokra