Webpack 网页:1个条目2个输出?
我是新来的网页包。我想将同一个文件输出两次,一个普通包(file.js)和一个名称中包含哈希的包(file.12345.js)。大概是这样的: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
├── 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
使用复制网页包插件复制(重命名)您的文件
├── 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”等。