2014-09-24 14 views
6

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?

+0

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 ... –

+0

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ư . –

+0

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. –

Trả lời

11

Nếu bạn thêm browserify-shim với {global: true}, nó sẽ được áp dụng cho phụ thuộc của bạn 'phụ thuộc (và vv), mà hy vọng sẽ làm những gì bạn muốn.

Giả sử bạn đang sử dụng browserify liệu trong Gulpfile của bạn, thay vì:

b.transform('browserify-shim'); 

làm:

b.transform({global: true}, 'browserify-shim'); 

Nếu bạn đang sử dụng gulp-browserify, tôi không chắc chắn liệu có cách nào để chỉ định biến đổi chung.

+0

Điều này đã làm cho các trick cho tôi. Cảm ơn! – poshaughnessy

+0

Cảm ơn bạn! Điều đó cũng làm việc cho tôi. –

-1
{global: true} 

hoạt động cho tôi ... tại sao đây không phải là mặc định?

+1

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung liên quan đến _why_ và/hoặc _how_ mã này câu trả lời cho câu hỏi sẽ cải thiện đáng kể giá trị dài hạn của nó. Vui lòng [sửa] câu trả lời của bạn để thêm một số giải thích . –

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