В моем интерфейсном коде я использую require()
, чтобы вытащить библиотеки, которые, в свою очередь, зависят от разных версий Underscore.js. В результате, когда я использую браузеру для объединения всего вместе, вывод содержит несколько копий Underscore. Есть ли способ сказать браузеру, что require('underscore')
должен всегда импортировать определенный файл?Как предотвратить включение браузера из нескольких версий подзависимостей?
В качестве демонстрации проблемы, представьте себе, у меня есть следующие зависимости:
// package.json
"dependencies": {
// Depends on underscore 1.7.0
"backbone": "^1.1.2",
// Depends on underscore 1.6.0
"backbone.marionette": "^2.3.0"
}
В main.js
я использую обе библиотеки:
// main.js
var Backbone = require('backbone');
var Marionette = require('backbone.marionette');
console.log("Hello, world!");
Когда я создаю пакет, несколько версий подчеркивания включенные:
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) Клонировать и запустить npm install && npm test
, чтобы увидеть его в действии)
Я попытался добавить browser
раздел моей package.json
, как в следующем, но это, похоже, не имеют никакого эффекта:
// package.json
"browser": {
"underscore": "./node_modules/underscore/underscore.js"
}
Я понимаю, почему npm
устанавливает дубликат (и имеет смысл сделать это таким образом для серверного кода), но каков правильный способ справиться с этим при использовании браузера?