Webpack 网页:1个条目2个输出?

Webpack 网页:1个条目2个输出?,webpack,Webpack,我是新来的网页包。我想将同一个文件输出两次,一个普通包(file.js)和一个名称中包含哈希的包(file.12345.js)。大概是这样的: ├── file.js ├── dist/ │ └── file.js │ └── file.12345.js plugins: [ new CopyWebpackPlugin([ { from: './dist/file.js' to: './dist/[name].[hash].[ext]',

我是新来的网页包。我想将同一个文件输出两次,一个普通包(file.js)和一个名称中包含哈希的包(file.12345.js)。大概是这样的:

├── file.js
├── dist/ 
│   └── file.js
│   └── file.12345.js
plugins: [
   new CopyWebpackPlugin([
   {
      from: './dist/file.js'
      to: './dist/[name].[hash].[ext]',
      toType: 'template'
   }
  ], options)
]
但是,据我所知,您只能在配置文件中定义1个输出。这不起作用,因为webpack需要一个字符串作为文件名:

output: {
    path: path.resolve(__dirname, './dist'),
    filename: ['./[name].js', './[name].[chunkhash].js']
}
如何同时输出这两个参数


我为什么想要这个/问题出在哪里?
我在heroku上托管我的代码。在登台时,我需要file.js,在生产时需要file.12345.js。但是,在heroku上升级登台到生产是没有额外构建的,它只是复制代码。无法为其运行另一个脚本


为什么不总是使用文件.12345.js?

当然,我也可以使用插件将最新的文件.12345.js输入到我的html文档中。但是,我无法访问html,因为我们正在使用一个工具来构建网站。

解决方案1

使用webpack,您可以返回一组配置。因此,在您的情况下,您可以这样做:

function createConfig(fileName) {
 return {
   output: {
      filename
   }
   // all other props
 }
}

module.exports = [
   createConfig('./[name].js'),
   createConfig('./[name].[chunkhash].js')
]
我们在这里要做的是创建一个函数,返回一个网页配置。文件名作为参数传递。因此,可以动态设置文件名

我们导出通过调用createConfig函数创建的Web包配置数组。作为参数,我们传入所需的文件名

一个缺点是,您返回的每个配置都会再次传输所有内容。(所以每件事都要花两倍的时间)

解决方案2

使用复制网页包插件复制(重命名)您的文件

例如,让webpack为您创建file.js,并将复制webpack插件添加到您的配置中,如下所示:

├── file.js
├── dist/ 
│   └── file.js
│   └── file.12345.js
plugins: [
   new CopyWebpackPlugin([
   {
      from: './dist/file.js'
      to: './dist/[name].[hash].[ext]',
      toType: 'template'
   }
  ], options)
]

我认为它不受支持,我也看不出它有什么用处。你确定这不仅仅是一个问题吗?你可以很容易地配置一个构建步骤,用散列复制文件,并以其他方式将其剥离。谢谢,我编辑了我的帖子并说明了问题。谢谢!解决方案1成功了。我用插件试过了,但是插件会在构建完成之前运行,所以它会使用dist文件夹中的旧文件.js。此外,占位符也无法工作,因为它只会输出“[name].js”等。