2016-05-26 13 views
8

Tôi đang sử dụng gói web để giữ mã JavaScript của mình được tổ chức thành các mô-đun nhưng tôi đang gặp sự cố khi cố tải SDK Facebook JS. Tôi đã thử sử dụng tùy chọn externals của webpack nhưng vì thư viện được tải không đồng bộ, tôi không nghĩ rằng nó sẽ cung cấp câu trả lời tôi đang tìm kiếm.Sử dụng Facebook JS SDK trong một Mô-đun (gói web)

Đã xảy ra sự cố với webpack giải quyết vấn đề này. Tuy nhiên, tôi không nghĩ nó hoạt động lâu hơn nữa. https://github.com/webpack/webpack/issues/367

Điều gì sẽ là một cách tiếp cận tốt cho vấn đề này? Tôi có nên tải SDK đồng bộ không?

+2

Tôi đã không thể tìm được giải pháp tốt. Chỉ cần tham khảo 'window.FB' bây giờ. – joemaller

Trả lời

0

Vì webpack chỉ là gói trình mô-đun, bạn nên sử dụng trình tải mô-đun để thực hiện công việc, như RequireJS nếu bạn muốn sử dụng các mô-đun AMD hoặc đơn giản sử dụng lib script.js này.

import $script from "scriptjs"; 

$script("//url/thescript.js",() => { 
    // ... 
}); 

EDIT: Wrapping trong một cái gì đó đơn giản hơn để sử dụng:

import $script from "scriptjs"; 

export default function importAsync(url) { 
    return new Promise((resolve, reject) => { 
    $script(url, resolve); //just a simple, version. You should treat the reject case 
    }); 
}); 

Và sau đó chỉ cần sử dụng nó như:

//... 
importAsync("//url.to/script.js").then(module => { 
    //... 
}) 

Bằng cách này sẽ đơn giản hơn nhiều nếu bạn muốn thay đổi bộ nạp mô-đun của bạn trong tương lai :)

+0

Tôi biết câu hỏi này là cũ nhưng tôi tự hỏi nếu bạn có thể sử dụng 'import(). Then()' bây giờ và tránh sử dụng một công cụ như 'scriptjs' hoàn toàn. –

+0

Hoặc nhiều khả năng một cái gì đó như 'fetch()' –

+0

Như tôi đã nói, tiếc là webpack chỉ là một gói phần mềm mô-đun, và không biết làm thế nào để điều trị các mô-đun từ xa không đồng bộ. Đối với điều này, nếu bạn muốn một cái gì đó có tổ chức hơn, bạn có thể sử dụng requireJS và làm cho bạn webpack xuất gói cuối cùng của bạn để AMD. Không phải là thực hành tốt để sử dụng tìm nạp để lấy tập lệnh (văn bản) và sau khi thử thực hiện lệnh eval() bằng tay, hãy để bộ nạp mô-đun này cho bạn :) –

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