2015-01-13 6 views
15

В моем интерфейсном коде я использую 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 устанавливает дубликат (и имеет смысл сделать это таким образом для серверного кода), но каков правильный способ справиться с этим при использовании браузера?

ответ

10

В Browserify обнаружено дублирование, которое должно избегать загрузки одной и той же версии более одного раза. Однако, если ваше дерево node_modules содержит несколько копий одного и того же модуля, это обнаружение может (должно?) Потерпеть неудачу.

Решение, которое я использую, чтобы DeDupe структуру пакета с НПМ:

npm dedupe 

Это только оставит неизбежных простофили в дереве зависимостей и будет регистрировать предупреждение о тех простаков, так что вы можете двойная проверка.

Смежные вопросы