2015-01-13 19 views
15

Trong mã front-end của mình, tôi sử dụng require() để kéo các thư viện, đến lượt nó, phụ thuộc vào các phiên bản khác nhau của Underscore.js. Kết quả là, khi tôi sử dụng trình duyệt để kết hợp mọi thứ lại với nhau, đầu ra chứa nhiều bản sao của dấu gạch dưới. Có cách nào để thông báo cho trình duyệt rằng require('underscore') phải luôn nhập một tệp cụ thể không?Làm cách nào để ngăn trình duyệt không bao gồm nhiều phiên bản phụ thuộc phụ?

Như một minh chứng của vấn đề, hãy tưởng tượng tôi có sự phụ thuộc như sau:

// package.json 
"dependencies": { 
    // Depends on underscore 1.7.0 
    "backbone": "^1.1.2", 

    // Depends on underscore 1.6.0 
    "backbone.marionette": "^2.3.0" 
} 

Trong main.js tôi sử dụng cả hai thư viện:

// main.js 
var Backbone = require('backbone'); 
var Marionette = require('backbone.marionette'); 
console.log("Hello, world!"); 

Khi tôi tạo ra một bó, nhiều phiên bản của gạch là bao gồm:

PS> browserify main.js -o out.js 
PS> findstr _.VERSION out.js 
    _.VERSION = '1.7.0'; 
    _.VERSION = '1.6.0'; 

(I created a GitHub repository with a more complete example. Clone it và chạy npm install && npm test để xem nó trong hành động)

tôi đã cố gắng thêm một phần browser-package.json của tôi như sau, nhưng nó dường như không có bất kỳ tác:

// package.json 
"browser": { 
    "underscore": "./node_modules/underscore/underscore.js" 
} 

Tôi hiểu tại sao npm cài đặt trùng lặp phụ thuộc (và nó có ý nghĩa để làm điều đó theo cách này cho mã phía máy chủ) nhưng cách chính xác để đối phó với điều này khi sử dụng browserify là gì?

Trả lời

10

Có phát hiện trùng lặp trong Browserify nên tránh tải cùng một phiên bản nhiều lần. Tuy nhiên, nếu cây node_modules của bạn chứa nhiều bản sao của cùng một mô-đun, phát hiện này có thể (nên?) Không thành công.

Các giải pháp mà tôi đang sử dụng là để dedupe cấu trúc gói với NPM:

npm dedupe 

này sẽ chỉ rời khỏi giá trị nhân bản không thể tránh khỏi trong cây phụ thuộc của bạn và nó sẽ ghi lại một lời cảnh báo về những giá trị nhân bản để bạn có thể kiểm tra hai lần.

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