2015-10-09 16 views
12

tôi có cấu hình webpack sau với nhiều điểm nhập cảnh ...Trong webpack, làm thế nào tôi có thể có các thư mục đầu ra khác nhau cho nhiều điểm nhập?

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

Có thể thiết lập một đường dẫn đầu ra khác nhau cho mỗi mục?

Thay vì nhận được một sản lượng ...

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

Tôi muốn ...

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

Các giải pháp lý tưởng đối với tôi sẽ cho output.path để chấp nhận một hàm. Ví dụ:

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

Có ai biết nếu điều này là có thể hoặc nếu có plugin hiện có có thể thực hiện việc này?

EDIT Tôi không muốn sử dụng nhiều mục cấu hình (multi-biên dịch) bởi vì tôi sẽ không thể để tạo ra một tập tin được chia sẻ giữa các điểm nhập với CommonsChunkPlugin nữa

+0

Bạn đã thử đổi tên một trang khác trong "someSubDir/anotherPage" (sử dụng '" ') trong đối tượng nhập của bạn? –

+0

Tôi đã thử gửi tham số thứ hai trong path.resolve là 'build/[name] /', được bật ra –

Trả lời

13

Một chút hacky, nhưng điều này nên làm các trick.

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. 
} 

Bạn không thể đặt đường dẫn đến chức năng, webpack sẽ không gọi cho bạn.

+0

Vâng, Điều này thật ý nghĩa. Giải pháp tuyệt vời. –

+0

Hacky thực sự, nhưng nó hoạt động –

+0

Đây là thiên tài! –

2

Bạn có thể trả về một mảng cấu hình cho webpack để thực thi. Tôi nghĩ rằng sẽ cung cấp cho bạn đủ quyền kiểm soát đường dẫn đầu ra để đạt được những gì bạn cần.

+2

Vấn đề với cách tiếp cận này là tôi không còn có thể tạo một gói được chia sẻ giữa các điểm nhập khác nhau bằng cách sử dụng CommonsChunkPlugin hoặc một biểu định kiểu được chia sẻ với ExtractTextPlugin. nhận thức được một số cách để thực hiện điều này với nhiều cấu hình? –

+0

@CharlieMartin Bạn có thể làm '[name]/[name] .js' nhưng rõ ràng đó không phải là những gì bạn muốn. Có thể bạn sẽ cần phải vá webpack mình để làm cho nó –

+0

cảm ơn sự giúp đỡ của bạn –

Các vấn đề liên quan