W moim kodzie frontowym używam require()
do pobierania bibliotek, które z kolei zależą od różnych wersji Underscore.js. W rezultacie, gdy używam trybu przeglądania w celu łączenia wszystkich elementów, dane wyjściowe zawierają wiele kopii znaku podkreślenia. Czy istnieje sposób, aby powiedzieć, że przeglądarka powinna zawsze importować konkretny plik?Jak zapobiegać włączaniu funkcji przeglądania w wielu wersjach podrzędnych zależności?
Jako demonstrację problemu wyobrazić Mam następujące zależności:
// package.json
"dependencies": {
// Depends on underscore 1.7.0
"backbone": "^1.1.2",
// Depends on underscore 1.6.0
"backbone.marionette": "^2.3.0"
}
W main.js
używam obu bibliotek:
// main.js
var Backbone = require('backbone');
var Marionette = require('backbone.marionette');
console.log("Hello, world!");
Kiedy utworzyć pakiet, różne wersje podkreślenia są włączono:
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. Klonuj i uruchomić npm install && npm test
aby zobaczyć go w akcji)
Próbowałem dodając sekcję browser
do mojego package.json
jak poniżej, ale nie wydaje się mieć żadnego wpływu:
// package.json
"browser": {
"underscore": "./node_modules/underscore/underscore.js"
}
rozumiem dlaczego npm
instaluje duplikat zależności (i ma sens, aby zrobić to w ten sposób dla kodu po stronie serwera), ale jaki jest właściwy sposób radzenia sobie z tym przy użyciu przeglądarki?