Tworzę dwa moduły dla NodeJS, pierwszy nazwany aligator
i drugi aligator-methods
. Drugi zależy od pierwszego do pracy. Rozwijam te dwa moduły w tym samym czasie i chcę mieć łącze globalne, aligator
aby móc go używać tak, jak w rejestrze npm i właśnie zainstalowałem go globalnie. Aby to zrobić, dokumentacja NPM mówi, że muszę użyć, npm link
ale nie działa.
Plik package.json
modułu aligator
:
{
"name": "aligator",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "spec"
},
"scripts": {
"test": "gulp jasmine"
},
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"bluebird": "^1.2.4",
"lodash": "^2.4.1",
"mathjs": "^0.22.0"
}
}
Plik package.json
modułu aligator-methods
:
{
"name": "aligator-methods",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "jasmine"
},
"scripts": {
"test": "gulp jasmine"
},
"author": "",
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"lodash": "^2.4.1",
"mathjs": "^0.22.0",
"aligator": "^0.0.1"
}
}
Przede wszystkim podłączyłem moduł globalnie:
$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator
To, jeśli się nie mylę, stworzyło globalne odniesienie do mojego modułu aligator
i teraz mogę używać tego modułu z dowolnego miejsca na komputerze.
Potem poszedłem do innego modułu i próbowałem zainstalować zależność, ale dało mi to takie wyjście:
$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.
npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0
Próbowałem nawet połączyć to bezpośrednio z:
$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Ale to też nie zadziałało.
Jakieś przemyślenia na temat tego, co może się stać? Czytałem gdzieś, że może miało to coś wspólnego z moją instalacją node i npm, ponieważ zostało zrobione przez Homebrew, więc czasami muszę go użyć sudo
, wydawało się to mało prawdopodobne, ale wypróbowałem to, co zaproponowali i też nie zadziałało.
aligtor
i próbujesz odnieść się do niej w drugim module jakoaligator
. Może to również spowodować załamanie się zależności.main
moimpackage.json
, dziękuję za zaktualizowanie odpowiedzi z poprawką!Odpowiedzi:
Napotkałem ten problem z powodu NVM, uruchomiłem jedną wersję węzła dla zależności, a drugą dla zależności.
źródło
Usunięcie,
package-lock.json
a następnie ponowne uruchomienienpm install
rozwiązało problem.źródło
package.json
, ale przez większość czasu widzę, że topackage-lock.json
lubyarn.lock
byli strażnikami tego.Problem polegał na tym, że
main
właściwośćpackage.json
wskazywała na nieistniejący plik. Wygląda na to, że problem może się zdarzyć z wielu powodów, więc zapoznaj się z innymi odpowiedziami.źródło
main
. Przeważnie robiłem bez tego, ale myślę, że stwarza te drobne problemy.Przy pierwszym uruchomieniu
npm link
zaligator
katalogu tworzysz łącze z globalnego katalogu node_modules doaligator
. Następnie, gdy uruchamiasznpm link aligator
zaligator-methods
katalogu, łączysz sięaligator
z lokalnie zainstalowanymi modułami node_modules do oryginalnego źródła (jak widać w powyższym przykładzie). Gdy to zrobisz, nie powinno być już potrzeby instalacji, ponieważ jest już „zainstalowany”. Jakie błędy widzisz po uruchomieniunpm link aligator
polecenia?Jeśli chcesz tylko zainstalować zależność z katalogu lokalnego, możesz po prostu spróbować użyć
npm install
zamiast tego. Na przykład:źródło
npm link
nie pokazał żadnych błędów. Problem w moim przypadku polegał na tym, że właściwośćmain
wskazywała na nieistniejący plik. Co do mojegonpm install
, masz rację, nie musiałem niczego instalować, wszystkonpm link
robi. Dzięki za to, że o tym nie wiedziałem.Mój problem polegał na tym, że repozytorium A było używane,
npm
a repozytorium Byarn
, więc musiałem uruchomićyarn link
repozytorium B, aby wciągnąć go przeznpm link package-name
repozytorium A.źródło
Napraw moją wersję tego problemu; w npm v5.3.0 usunąłem
node_modules
z repozytorium, w którym łączyłem się z innym projektem.Dowiedziałem się, że po npm v3 próbują umieścić wszystkie zależności node_modules w jednym katalogu node_modules (jeden w twoim projekcie), aby maksymalnie spłaszczyć strukturę ( http://codetunnel.io/npm-5-changes-to-npm -link / ).
źródło
Dla mnie zadziałało:
node_modules
zarówno moduł zależności, jak i modułu konsumenta.npm unlink --no-save [dependency-module]
Teraz mogę w pełni przetestować lokalnie mój niepublikowany moduł.
Dodatkowo istnieje polecenie npm pack, które może pomóc w testowaniu niepublikowanych modułów, chociaż nie jest tak solidne.
npm-pack
źródło
U mnie stało się tak, gdy zmniejszyłem numer wersji mojego pakietu lokalnego z 0.1.0 do 0.0.1. A w projektach, w których łączyłem się z tym pakietem, nadal korzystałem z wyższego numeru wersji. Aktualizacja zależności w
package.json
naprawiona.źródło
Podczas korzystania z peerDependency
Tworzę dwa pakiety
stejs
, istejs-loader
.stejs-loader
mastejs
jakopeerDependency
. Kiedy biegałemnpm link stejs-loader
iwnpm link stejs
moim projekcie otrzymywałem błąd,stejs-loader
którego nie mogłem znaleźćstejs
. Naprawiłem to, uruchamiającnpm link stejs
w katalogustejs-loader
.źródło
Sprawdź tsconfig moduleResolution
Jeśli tak jak ja zdarzyło ci się zmienić tsconfig
module
zes5
naesnext
lub coś, to plikmoduleResolution
domyślne mogło się zmienić.Bez
moduleResolution
ustawienia na „węzeł”, Typecript nie rozwiąże pakietów node_modules.Możesz przeczytać na stronie Opcje kompilatora o tym, jak wartość domyślna zależy od wartości
module
, której wartość domyślna z kolei zależytarget
- ale prawdopodobnie jawnie ustaw ją na „węzeł”.źródło