В моем интерфейсном коде я использую 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!");
Когда я создаю пакет, включаются несколько версий Underscore:
PS> browserify main.js -o out.js
PS> findstr _.VERSION out.js
_.VERSION = '1.7.0';
_.VERSION = '1.6.0';
(Я создал репозиторий GitHub с более полным примером. Скройте его и запустите npm install && npm test
, чтобы увидеть его в действии)
Я попробовал добавить раздел browser
в свой package.json
, как показано ниже, но это не показало никакого эффекта:
// package.json
"browser": {
"underscore": "./node_modules/underscore/underscore.js"
}
Я понимаю, почему npm
устанавливает дубликаты зависимостей (и имеет смысл сделать это таким образом для серверного кода), но какой правильный способ справиться с этим при использовании браузера?