Ich entwickle zwei Module für NodeJS, das erste mit dem Namen aligator
und das zweite mit dem Namen aligator-methods
. Der zweite hängt davon ab, ob der erste arbeitet. Ich entwickle diese beiden Module gleichzeitig und möchte eine globale Verknüpfung herstellen, aligator
damit ich sie so verwenden kann, wie sie sich in der npm-Registrierung befindet, und ich habe sie gerade global installiert. Um dies zu tun, sagt NPM-Dokumentation, dass ich verwenden muss, npm link
aber es funktioniert nicht.
Datei package.json
des Moduls 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"
}
}
Datei package.json
des Moduls 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"
}
}
Zunächst habe ich das Modul global verknüpft:
$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Wenn ich mich nicht irre, wurde eine globale Referenz meines Moduls erstellt, aligator
und jetzt kann ich dieses Modul von überall im Computer verwenden.
Dann ging ich zum anderen Modul und versuchte, die Abhängigkeit zu installieren, aber es gab mir diese Ausgabe:
$ 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
Ich habe sogar versucht, es direkt zu verknüpfen mit:
$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Aber es hat auch nicht funktioniert.
Irgendwelche Gedanken darüber, was passieren könnte? Ich habe irgendwo gelesen, dass es vielleicht etwas mit meiner Installation von Node und Npm zu tun hat, weil es von Homebrew erstellt wurde und ich es manchmal verwenden sudo
muss. Es schien unwahrscheinlich, aber ich habe versucht, was sie vorgeschlagen haben, und es hat auch nicht funktioniert.
aligtor
und Sie versuchen, im zweiten Modul auf ihn zu verweisenaligator
. Dies kann auch zum Absturz Ihrer Abhängigkeit führen.main
meinempackage.json
, danke, dass du die Antwort mit deinem Fix aktualisiert hast!Antworten:
Ich bin auf dieses Problem aufgrund von NVM gestoßen. Ich habe eine Version des Knotens für die Abhängigkeit und eine andere für die abhängige Version ausgeführt.
quelle
Durch Löschen
package-lock.json
und erneutes Ausführennpm install
wurde das Problem für mich behoben.quelle
package.json
, aber die meiste Zeit sehe ich, dass diepackage-lock.json
oderyarn.lock
die Gatekeeper dafür waren.Das Problem war, dass die
main
Eigenschaft vonpackage.json
auf eine nicht vorhandene Datei zeigte. Es scheint, dass das Problem aus mehreren Gründen auftreten kann. Schauen Sie sich also unbedingt andere Antworten an.quelle
main
. Meistens habe ich darauf verzichtet, aber ich denke, es schafft diese kleinen Probleme.Wenn Sie
npm link
dasaligator
Verzeichnis zum ersten Mal ausführen , erstellen Sie einen Link von Ihrem globalen Verzeichnis node_modules zualigator
. Wenn Sie dannnpm link aligator
aus demaligator-methods
Verzeichnis ausführen , verknüpfen Siealigator
Ihre lokal installierten node_modules mit der ursprünglichen Quelle (wie die Ausgabe in Ihrem obigen Beispiel zeigt). Sobald dies erledigt ist, sollte keine Installation mehr erforderlich sein, da es bereits "installiert" ist. Welche Fehler sehen Sie, nachdem Sie dennpm link aligator
Befehl ausgeführt haben?Wenn Sie nur eine Abhängigkeit aus einem lokalen Verzeichnis installieren möchten, können Sie
npm install
stattdessen versuchen, sie zu verwenden. Beispielsweise:quelle
npm link
hat keine Fehler gezeigt. Das Problem in meinem Fall war, dass die Eigenschaftmain
auf eine nicht vorhandene Datei zeigte. Was meinenpm install
du hast Recht, brauchte ich nichts zu installieren , dasnpm link
tut alles. Danke dafür, ich wusste es nicht.Mein Problem war schließlich, dass Repo A
npm
und Repo B verwendet wurdenyarn
, also musste ichyarn link
Repo B ausführen, um es über Vianpm link package-name
in Repo A zu ziehen .quelle
Fix für meine Version dieses Problems; In npm v5.3.0 habe ich das
node_modules
Repo entfernt, das ich in ein anderes Projekt verlinkt habe.Ich fand heraus, dass sie nach npm v3 versuchen, alle node_modules-Abhängigkeiten in einem node_modules-Verzeichnis (eines in Ihrem Projekt) abzulegen, um die Struktur so weit wie möglich zu reduzieren ( http://codetunnel.io/npm-5-changes-to-npm) -link / ).
quelle
Was für mich funktionierte war:
node_modules
Modul sowohl in der Abhängigkeit als auch im Verbrauchermodul.npm unlink --no-save [dependency-module]
Jetzt kann ich mein unveröffentlichtes Modul lokal vollständig testen.
Zusätzlich gibt es einen Befehl npm pack, mit dem Sie Ihre unveröffentlichten Module testen können, obwohl er nicht ganz so robust ist.
npm-pack
quelle
Für mich geschah dies, als ich die Versionsnummer meines lokalen Pakets von 0.1.0 auf 0.0.1 verringerte. Und in den Projekten, in denen ich auf dieses Paket verlinkt habe, habe ich immer noch die höhere Versionsnummer verwendet. Das Aktualisieren von Abhängigkeiten wurde
package.json
behoben.quelle
Bei Verwendung von peerDependency
Ich entwickle zwei Pakete
stejs
undstejs-loader
.stejs-loader
hatstejs
alspeerDependency
. Als ich liefnpm link stejs-loader
undnpm link stejs
in meinem Projekt bekam ich einen Fehler,stejs-loader
der nicht gefunden werden konntestejs
. Ich habe es behoben, indem ichnpm link stejs
im Verzeichnis von ausgeführt habestejs-loader
.quelle
Überprüfen Sie tsconfig moduleResolution
Wenn Sie wie ich zufällig die tsconfig
module
vones5
inesnext
oder somoduleResolution
geändert haben, hat sich möglicherweise die Standardeinstellung geändert.Ohne
moduleResolution
die Einstellung "node" löst Typoskript keine node_modules-Pakete auf.Auf der Seite Compiler-Optionen können Sie nachlesen, wie der Standardwert vom Wert von abhängt
module
, dessen Standardwert wiederum davon abhängttarget
- aber wahrscheinlich explizit auf "Knoten" setzen.quelle