2015-10-09 46 views
12

我有多个入口点以下的WebPack配置...在webpack中,如何为多个入口点提供不同的输出目录?

module.exports = { 
entry: { 
    somePage: "./scripts/someDir/somePage.js", 
    anotherPage: "./scripts/someDir/someSubDir/anotherPage.js" 
}, 
output: { 
    path: path.resolve(__dirname, 'out'), 
    filename: '[name].js' 
}, 
... 

是否有可能设置每个条目的不同输出路径?

非但没有的输出...

/out/somePage.js /out/anotherPage.js

我想...

/out/someDir/somePage.js /out/someDir/someSubDir/anotherPage.js

对我来说,理想的解决方案将是output.path接受功能。例如...

... 
output: { 
    path: function (name, hash) { 
     return path.resolve(__dirname, myMapOfFilenamesToDirs[name]); 
    }, 
    filename: '[name].js' 
}, 

有谁知道这是可能的,或者如果有一个现有的插件可以实现这一点?

编辑我不想使用多个配置项(多编译器),因为我将无法创建共享文件与CommonsChunkPlugin入口点中了

+0

您是否试过在您的入口对象中的“someSubDir/anotherPage”(使用''')重命名anotherPage? –

+0

我曾尝试将path.resolve中的第二个参数发送为'build/[name] /',结果Webpack无法编译,但下面的最佳答案真的很有魅力 –

回答

13

有点不好意思,但是这个应该可以做到。

module.exports = { 
entry: { 
    "somePage": "./scripts/someDir/somePage.js", 
    "someSubDir/anotherPage": "./scripts/someDir/someSubDir/anotherPage.js" 
}, 
output: { 
    path: path.resolve(__dirname, 'out/someDir'), 
    filename: '[name].js' 
}, 
// Etc. 
} 

您无法设置函数的路径,webpack将不会为您调用它。

+0

是的,这是有道理的。好的解决方案 –

+0

确实是哈克,但它的工作 –

+0

这是天才! –

2

你可以返回一个数组的webpack执行的配置。我认为这样可以让你对输出路径有足够的控制来实现你所需要的。

+2

这种方法的问题是,我不能再使用CommonsChunkPlugin或共享样式表与ExtractTextPlugin在不同的入口点之间创建共享包。是否知道用多种配置实现这一点的方法? –

+0

@CharlieMartin你可以执行'[name]/[name] .js',但显然这不是你想要的,很可能你需要自己修补webpack才能做到这一点工作 –

+0

感谢您的帮助 –

相关问题