如何让webpack将其输出发到两个位置?

3

我的当前配置如下:

output: {
  filename: 'bundle.js',
  path: OUT_DIR
},

然而我需要将bundles.js放到两个目录中?

我可以通过简单地将目录数组传递给路径来实现这一点吗?

还是我需要做更复杂的事情?

目前,我有一个名为的bash脚本,每次构建后都需要手动输入,这很繁琐。

希望webpack有一个配置选项,可以将输出发送到两个或多个位置。

研究

谷歌搜索

这个SO问题已经4年了,没有我要找的东西 - so

文档在这里没有提到一种方法 - webpack

如果没有配置选项,如何自动运行bash命令?

我尝试将字符串数组传递给它而不是字符串,但它崩溃了,出现了明显的错误:

无效的配置对象。Webpack已经使用不符合API模式的配置对象进行初始化。 - 配置输出路径应该是一个字符串。

传递数组行不通。嗯。

尝试另一种方法,从谷歌开始 - 搜索

提供了一个可能的解决方案 - so

按要求完成exportFunc

const exportFunc = ( env ) => {
  console.log('webpack.config.js-exportFunc', OUT_DIR);
  return {
    entry: `${IN_DIR}/index.jsx`,
    output: {
      filename: 'bundle.js',
      path: '/Users/c/_top/ll-front/dist'
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [ 'style-loader', 'css-loader' ]
        },
        {
          test: /\.jsx?/,
          include: IN_DIR,
          use: {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env', '@babel/preset-react'],
              plugins: ['@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'],
            }
          }
        }
      ]
    }
  };
};

module.exports = exportFunc;
2个回答

1
你可以通过导出配置数组来使用webpack的多编译器模式
就像文档中所述:

不要导出单个配置对象/函数,你可以导出多个配置(自webpack 3.1.0以来支持多个函数)。当运行webpack时,所有配置都会被构建。

例如:
const config = {
  // your webpack config
}

const outputPaths = ["path/one", "path/two"]

module.exports = outputPaths.map(outputPath => {
  return {
    ...config,
    name: outputPath,
    output: {
      ...config.output,
      path: path.resolve(__dirname, outputPath)
    }
  }
})


由于您正在使用配置函数,因此可以像这样进行操作:
const outputPaths = ["path/one", "path/two"]

module.exports = outputPaths.map(outputPath => {
  return env => {
    return {
      entry: `${IN_DIR}/index.jsx`,
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, outputPath)
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [ 'style-loader', 'css-loader' ]
          },
          {
            test: /\.jsx?/,
            include: IN_DIR,
            use: {
              loader: 'babel-loader',
              options: {
                presets: ['@babel/preset-env', '@babel/preset-react'],
                plugins: ['@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'],
              }
            }
          }
        ]
      }
    };
  }
})

看起来我需要使用这种方法重新调整我的整个配置文件? - jennifer
@j.a. 为什么?在某个时候,你会有一个对象,它是你的 webpack 配置。不要直接导出它,而是像上面那样导出一个配置数组,这些配置使用你现有的 webpack 配置作为“基础”配置。分享你的 webpack 配置,我会给你展示。 - sdgluck
以上是我分享的exportFunc函数。 - jennifer

0

你可以使用多个配置。这里是webpack文档链接

为了避免代码重复,将当前配置视为一个对象。然后复制该对象并覆盖复制对象的输出部分。最后将两个对象放入数组中。使用该数组作为新的配置。

var yourCurrentConfig = {...};

var secondaryDestinationConfig = Object.assign(yourCurrentConfig, {
    output: {
        path: {
            filename: 'bundle.js',
            path: SECONDARY_DIR
        } 
    }
});

var newConfig = [
   yourCurrentConfig, secondaryDestinationConfig
];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接