Tôi đang cố gắng tái cấu trúc thư viện sử dụng Browserify bằng cách làm mờ một số mô-đun nhất định trong gói bằng cách sử dụng browserify-shim. Cụ thể, thư viện sử dụng yêu cầu ("codemirror") nhưng tôi muốn cung cấp một gói không bao gồm CodeMirror nhưng sẽ sử dụng một gói được cung cấp qua CDN.Làm mờ phụ thuộc của các phụ thuộc với browserify-shim
Vì vậy, tôi đã có browserify-shim config trong package.json tôi như
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror"
}
Cho đến nay rất tốt. yêu cầu ('jquery') và yêu cầu ('codemirror') đã biến mất khỏi gói được duyệt và được thay thế bằng đoạn mã dự kiến để lấy jQuery và CodeMirror khỏi đối tượng cửa sổ.
Thư viện cũng yêu cầu một số tiện ích bổ sung CodeMirror. Ví dụ yêu cầu ('codemirror/addon/hint/show-hint.js'). Đó là tốt. Tôi muốn gói bổ sung đó được đóng gói. Tuy nhiên, bên trong phần bổ sung này là một trình bao bọc UMD bao gồm yêu cầu ("../../ lib/codemirror"). Browserify đang thấy điều này và đang bó CodeMirror từ /node_modules/codemirror/lib/codemirror.js vì điều này (tôi nghĩ). Tôi muốn điều này để sử dụng window.CodeMirror như được định nghĩa trong shim codemirror thay vào đó, nhưng không thể tìm ra nó. Đã thử nhiều biến thể bao gồm:
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror",
"../../lib/codemirror": "global:CodeMirror",
"codemirror/addon/hint/show-hint.js": {
"exports":null,
"depends":["../../lib/codemirror:CodeMirror"]
}
}
Yêu cầu ("../../ lib/codemirror") sẽ không biến mất! Tôi chắc chắn tôi đang thiếu một cái gì đó.
Tôi đang chạy điều này từ tập lệnh Gulp, nhưng tôi không nghĩ điều đó sẽ tạo nên bất kỳ sự khác biệt nào. Trình duyệt phiên bản 3.38.1. Browserify-shim phiên bản 3.7.0.
Bất kỳ ý tưởng nào?
Có vẻ như browserify-shim có thể là sai lầm khi đi với điều này. Browserify option bundleExternal = false có thể giải quyết vấn đề. Điều tra ... –
bundleExternal = false không phải là câu trả lời đầy đủ vì nó để lại câu lệnh 'require' ban đầu. Vì vậy, browserify-shim như trong ví dụ đầu tiên vẫn là cần thiết. Nhưng nó giúp. Với cài đặt này, tôi có thể trực tiếp. Yêu cầu ('codemirror/addon/hint/show-hint.js') trước khi đóng gói trong kịch bản Gulp để có được phần bổ sung, nhưng yêu cầu bên ngoài của CodeMirror sẽ bị bỏ đi, có vẻ như . –
Có vẻ như trong phiên bản mới nhất của trình duyệt, có tùy chọn áp dụng {global: true} cho quá trình chuyển đổi browserify-shim, điều này sẽ làm cho nó chạy trên các phụ thuộc! Điều này cho phép chúng tôi shim yêu cầu ('../../ lib/codemirror') thành công. –