2012-06-27 9 views
59

Załóżmy, że chcesz zainstalować bibliotekę lib-a, która ma zależności: dep-1 i dep-2. Jeśli lib-a zadeklarował w swoim pakiecie.json, aby użyć wersji dep-2, która jest nieaktualna (powiedzmy, że nie działa na węźle 0.8.0, który właśnie wyszedł), ale istnieje gałąź dep-2, która działa z węzłem 0.8 .0 - nazwa oddziału node0.8.0.Czy podczas instalowania pakietu z NPM można użyć innej wersji jednej z jego zależności?

Więc pakiety w równaniu są:

git://github.com/user-a/lib-a 
git://github.com/user-b/dep-1 
git://github.com/user-c/dep-2 
git://github.com/user-c/dep-2#node0.8.0 

Czy istnieje sposób, aby powiedzieć KMP zainstalować lib-a, ale zamiast używać dep-2#node0.8.0dep-2?

Z KMP można zainstalować konkretną gałąź takim projekcie:

npm install git://github.com/user-c/dep-2#node0.8.0 

A gdybym dostosować package.json z lib-a, można powiedzieć, że do korzystania dep-2#node0.8.0 tak:

{ 
    "name": "lib-a", 
    "dependencies": { 
    "dep-1": ">= 1.5.0", 
    "dep-2": "git://github.com/user-c/dep-2#node0.8.0" 
    } 
} 

modyfikując package.json można następnie uruchomić

npm install lib-a 

i zainstaluje gałąźwęzła zgodną z 0.8.0. Wymaga to jednak dostępu do modyfikacji lib-a, której w moim przypadku nie mam. Technicznie, mógłbym rozwidlić lib-a i dokonać powyższej zmiany na pakiet.json. Ale w moim konkretnym przypadku lib-a istnieje zależność inny biblioteki, więc będę musiał bulić projekt to odwołuje się, i tak dalej ...

Więc pytanie jest, jest sposobem powiedz NPM, aby zainstalować lib-a, i powiedzieć, aby użyć oddziału node0.8.0 z dep-2? Coś takiego:

npm install lib-a --overrides dep-2:git://github.com/user-c/dep-2#node0.8.0 

To byłoby niesamowite. Jeśli nie jest to możliwe, dobrze byłoby wiedzieć, że mogę przygotować się do rozwidlenia/dostosowania łańcucha projektów.

Odpowiedz

42

NPM zainstalować składnię:

npm install (with no args in a package dir) 
npm install <tarball file> 
npm install <tarball url> 
npm install <folder> 
npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact] 
npm install [@<scope>/]<name>@<tag> 
npm install [@<scope>/]<name>@<version> 
npm install [@<scope>/]<name>@<version range> 
npm i (with any of the previous argument usage) 

więc można wybrać jedną z poniższych metod, aby zainstalować moduły.

Przypadek Najprostszym sposobem zainstalowania określonej wersji jest to jedno:

npm install [email protected] 

więcej info: https://docs.npmjs.com/cli/install

+6

Wygląda na to, jeśli najpierw zainstalować zależność, wówczas inne biblioteki, które wymagają ta zależność nie będzie pobierana samodzielnie. To rozwiązuje problem! Dzięki! –

+1

Czy to prawda? Próbowałem npm -g install/path/to/my/fork-with-fix, a następnie npm -g install pakiet-który-powinien-używać-forked-dependency-with-fix i ... nadal pobiera oficjalną wersję. –

+0

Spójrz na 'npm link'. – knownasilya

Powiązane problemy