2015-01-13 9 views
15

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?

Odpowiedz

10

Istnieje wykrywanie duplikatów w Browserify, które powinny unikać ładowania tej samej wersji więcej niż raz. Jeśli jednak twoje drzewo node_modules zawiera wiele kopii tego samego modułu, to wykrycie może (powinno?) Się nie powieść.

Rozwiązanie, które używam jest DeDupe strukturę pakietów z KMP:

npm dedupe 

Pozostawi tylko nieuniknionych powtórzeń w drzewie zależności i będzie zalogować się ostrzeżenie o tych powtórzeń, dzięki czemu można podwójne sprawdzenie.

Powiązane problemy