2015-10-09 45 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

感謝您的幫助 –

相關問題