2015-09-10 19 views
10

Tôi đang sử dụng gói webpack để gói gọn một khuôn khổ để sử dụng bởi bên thứ ba. Khuôn khổ này nên trưng ra nhiều lớp ES6. Xây dựng theo kiểu mô-đun, tôi đã viết một lớp cho mỗi tệp. Những gì tôi muốn làm là xây dựng tất cả các tập tin này với nhau và đưa chúng vào một "không gian tên" nhất định. Ví dụ:các lớp xuất webpack từ nhiều tệp nhập

apples.js export class Apples {...}
oranges.js export class Oranges {...}

webpack.config.js:

module.exports = { 
    entry: ['./src/apples.js', './src/oranges.js'], 
    output: { 
    path: './dist', 
    filename: 'fruit.js', 
    library: 'Fruit', 
    libraryTarget: 'umd' 
    } 
} 

Tuy nhiên, nếu tôi tải lên thư viện này trong trình duyệt và gõ fruit vào giao diện điều khiển , Tôi chỉ thấy đối tượng Oranges trong Fruit. Chỉ có tệp mục nhập cuối cùng được hiển thị lại trong thư viện. Chắc chắn, tài liệu webpack xác nhận hành vi này:

Nếu bạn chuyển mảng: Tất cả các mô-đun được tải khi khởi động. Người cuối cùng được xuất. http://webpack.github.io/docs/configuration.html#entry

Cách giải quyết hiện tại của tôi là xuất tất cả các lớp của tôi ra khỏi một tệp, nhưng rất khó sử dụng.

Tôi làm cách nào để thiết lập thư viện có nhiều tệp nhập được xuất tất cả? Hoặc tôi đang đi về một cái gì đó sai cách ở đây?

+2

Bạn có nói rằng bạn không muốn có một số tệp chỉ mục nơi bạn xác định thủ công những gì được xuất không? Tôi không hoàn toàn theo sau. – loganfsmyth

+0

@loganfsmyth đó là một phần lý do tại sao tôi tự hỏi nếu tôi đang đi về điều này một cách sai lầm. Tôi đã thử chỉ cần thêm một tập tin chỉ mục mà tôi nhập khẩu Táo và Cam và sau đó làm 'xuất khẩu {Táo, Oranges}'. Đó dường như là một giải pháp khả thi. –

+1

Đó là cách tiếp cận tôi mong đợi. Vào cuối ngày, các mô-đun có một số API công cộng và một số riêng tư, và tệp chỉ mục là những gì có thể xác định ở vị trí trung tâm. – loganfsmyth

Trả lời

1

Tôi nghĩ bạn nên sử dụng tệp entry.js để cho biết cách bạn tổ chức các mô-đun máy chủ của mình.

import Apples from './apples'; 
import Oranges from './oranges'; 

export { 
    Apples, 
    Oranges 
}; 

Bằng cách này, nếu bạn không muốn viết mã ngu ngốc như vậy bằng cách riêng của bạn, sử dụng Gulp/Grunt để tạo ra các tập tin 'entry.autogenerated.js' bởi một số logic sau đó chạy webpack với sự gia nhập 'entry.autogenerated.js'.

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