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ì?