Đối với các sinh viên năm thứ nhất, tôi đã cung cấp một thư viện dựa trên ES5 đơn giản được viết bằng cách sử dụng Mô hình mô-đun tiết lộ. Đây là một đoạn của mô-đun / không gian tên "chính", sẽ chứa các phần mở rộng khác:
window.Library = (function ($) {
if (!$) {
alert("The Library is dependent on jQuery, which is not loaded!");
}
return {};
})(window.jQuery);
Điều này hoạt động với khá nhiều 99,9% sinh viên mới bắt đầu phát triển web và không sử dụng những thứ ưa thích như ES6 kết hợp với Webpack hoặc Babel.
0,1% hiện đã yêu cầu tôi cung cấp phiên bản dựa trên ES6, có thể được nhập chính xác. Tôi rất vui khi cung cấp điều này, nhưng tôi hơi bế tắc về cách tiếp cận tốt nhất với điều này.
Tôi rõ ràng muốn giữ cách ES5, vì vậy sinh viên của tôi chỉ có thể bao gồm tệp bằng cách sử dụng thẻ script và nhập bất cứ Library.SomeExtension.aFunction();
nơi nào họ muốn. Trên hết, một số tiện ích mở rộng phụ thuộc vào jQuery, được thêm vào theo cách tương tự như đoạn trích ở trên.
Bây giờ tôi đang tìm kiếm một số cách có thể duy trì để tận dụng tốt nhất cả hai thế giới, với một cơ sở mã, với jQuery là một phụ thuộc. Tôi muốn cung cấp 99,9% a window.Library
, trong khi tôi muốn cung cấp 0,1% cho cách sử dụng import Library from 'library'
.
Tôi có thể thực hiện điều này với một tệp JS có cả hai không? Hoặc tôi sẽ cần một phiên bản ES6 đặc biệt (không phải là vấn đề để làm)? Và trên hết: Làm cách nào để tôi cải tổ mã của mình (tất cả tương tự như đoạn trích trên) theo cách tôi có thể hỗ trợ cả hai tình huống?
Bất kỳ và tất cả các con trỏ sẽ được đánh giá rất cao!
EDIT: Chỉ là một ghi chú bên lề, tôi đã có một gulpfile.js
vị trí điều hành thư viện này thông qua Babel
, minifiers
và những thứ khác. Vì vậy, phải mở rộng điều đó để giải quyết vấn đề trên không phải là vấn đề!
Library.SubLibrary.functionName
thiết lập và cả trong các tệp riêng biệt, ngay cả khi ai đó nhập nó dưới dạng ES6 hoặc bất cứ thứ gì khác. (Điều này chủ yếu là do các tiện ích mở rộng cũng có thể sử dụng lẫn nhau và sử dụng thiết lập ES6 tiêu chuẩn, điều này sẽ gây ra các tham chiếu vòng tròn).
export
và có sự phân công khác window
. Tôi đã nghĩ sẽ thật tuyệt nếu cả hai có thể được thực hiện trong một tệp duy nhất, vì điều đó sẽ cảm thấy thanh lịch hơn rất nhiều, nhưng export
từ khóa dường như chỉ hoạt động bên trong a type=module
. Tôi không biết nếu có một cách giải quyết, hoặc nếu điều đó là không thể.