2015-05-04 20 views
10

Làm cách nào tôi có thể tải mô-đun ES6 lười biếng? Bởi lười biếng, ý tôi là tôi không muốn thực sự tải các mô-đun mà không cần thiết. Ví dụ, đây là điều mà tôi có thể làm với RequireJS:Làm thế nào để tải mô-đun lười biếng hoạt động trong ES6

function someEventHandler() { 
    var SomeModule = require('some-module'), 
     module = new SomeModule(); 
    // ... 
} 

cái gì đó dọc theo đường cùng không xuất hiện để có thể sử dụng nhập khẩu ES6:

// Doesn't appear to be valid... 
function someEventHandler() { 
    import SomeModule from 'some-module'; 
    var module = new SomeModule(); 
    // ... 
} 

Có bất kỳ kỹ thuật khả thi chỉ kéo trong phụ thuộc khi cần thiết, sử dụng mô-đun ES6? Hoặc là con đường duy nhất để theo dõi biểu đồ phụ thuộc đầy đủ và tìm nạp mọi thứ ở phía trước?

+0

Bạn phải sử dụng các API hệ thống nạp. Xem [Nhập mô đun động trong Ember CLI] (http://stackoverflow.com/q/26728035/218196) –

+0

Không, không thể sử dụng cú pháp 'import'. Tuy nhiên, bạn có thể sử dụng một hàm không đồng bộ (!) Tương đương với hàm 'require'. – Bergi

Trả lời

15

Tuyên bố import sẽ chỉ hoạt động ở đầu tệp và sẽ tải tất cả các tệp đó. Điều này chủ yếu là để tránh các vấn đề tiềm ẩn với phụ thuộc vòng tròn.

Cũng sẽ có cách để tải không đồng bộ; tuy nhiên đặc điểm kỹ thuật dường như chưa được hoàn thiện. Các gói phần mềm ES6 module loader polyfill sử dụng một phương pháp gọi là System.import(moduleName) trả về một lời hứa và các đặc điểm kỹ thuật cuối cùng là khả năng tìm kiếm tương tự:

function someEventHandler() { 
    System.import('some-module').then((SomeModule) => { 
     var module = new SomeModule(); 
     // ... 
    }) 
} 
+0

Mọi cập nhật về tính sẵn sàng của cú pháp này? – fegemo

+5

Hiện tại, có đề xuất cho nhập động từ JavaScript: https://github.com/tc39/proposal-dynamic-import. Nó chỉ định một hàm 'import()' đơn giản trên phạm vi toàn cục. WebPack 2 hỗ trợ phiên bản sinve v2.1.0-beta.28 này. – jbandi

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