NPM: Nachdem das Modul "npm link" nicht gefunden wurde


88

Ich entwickle zwei Module für NodeJS, das erste mit dem Namen aligatorund 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, aligatordamit 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 linkaber es funktioniert nicht.

Datei package.jsondes 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.jsondes 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, aligatorund 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 sudomuss. Es schien unwahrscheinlich, aber ich habe versucht, was sie vorgeschlagen haben, und es hat auch nicht funktioniert.


Im veröffentlichten Code wird der Name des ersten Moduls geschrieben aligtorund Sie versuchen, im zweiten Modul auf ihn zu verweisen aligator. Dies kann auch zum Absturz Ihrer Abhängigkeit führen.
Bruno Toffolo

@BrunoToffolo Ja, Sie haben Recht, aber in diesem Fall war dies nur eine Rechtschreibfehler in der Post. Ich habe es korrigiert, danke.
Roc

Ich habe 4 Stunden meines elenden Lebens verloren und die Webpack-Konfiguration ausgetrickst: / Du hast mein Leben gerettet! +1
Tom Sarduy

8
Wow, ich hatte das gleiche Problem mit mainmeinem package.json, danke, dass du die Antwort mit deinem Fix aktualisiert hast!
Obsidian

Wenn Sie die Antwort gefunden haben, wäre es eine gute Idee, diese als Antwort zu posten und die Frage so zu stellen, wie sie mit dieser gelöst wurde :)
Alberto S.

Antworten:


38

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.


1
Können Sie oder jemand anderes einen Link zu einem Ort erstellen, an dem dies zufällig gelöst werden kann?
Kevin Danikowski

3
In meinem Fall muss ich 'nvm use <VERSION>' für beide Pakete ausführen, wobei VERSION für beide Pakete gleich war.
Linuxdan

26

Durch Löschen package-lock.jsonund erneutes Ausführen npm installwurde das Problem für mich behoben.


2
Das könnte das aktuelle Problem lösen, schafft aber möglicherweise einige größere. Sperrdateien spielen eine sehr wichtige Rolle und sollten nicht gelöscht werden. Kurz gesagt: Es sind die Mechanismen, die sicherstellen, dass jedes Teammitglied genau die gleichen Abhängigkeiten verwendet. Sie können diese Antwort bei Stapelüberlauf überprüfen : stackoverflow.com/questions/54124033/… Aber auch das Lesen des Grundes, der in den Dokumenten vorhanden ist, ist ein guter Anfang. docs.npmjs.com/files/package-lock.json
SKuijers

Ich wäre bereit, diese Antwort zu bestätigen, wenn eine fett gedruckte Notiz darauf hinweist, dass dies der letzte Ausweg sein sollte. Wie @SKuijers hervorhebt, spielen Sperrdateien eine wesentliche Rolle bei der Aufrechterhaltung von Abhängigkeitsversionen. Vermutlich wurden die Abhängigkeitsversionen auch in der gesperrt package.json, aber die meiste Zeit sehe ich, dass die package-lock.jsonoder yarn.lockdie Gatekeeper dafür waren.
FrostyDog

26

Das Problem war, dass die mainEigenschaft von package.jsonauf eine nicht vorhandene Datei zeigte. Es scheint, dass das Problem aus mehreren Gründen auftreten kann. Schauen Sie sich also unbedingt andere Antworten an.


omg ich möchte dies 50 mal upvoten und mich einmal für jede upvote facepalm.
Ben

Interessant zu wissen, dass das Projekt erfordert main. Meistens habe ich darauf verzichtet, aber ich denke, es schafft diese kleinen Probleme.
cst1992

Schöner Fund! Ich habe deine Antwort gesehen und wusste sofort, dass dies mein Problem ist :).
Slashp

11

Wenn Sie npm linkdas aligatorVerzeichnis zum ersten Mal ausführen , erstellen Sie einen Link von Ihrem globalen Verzeichnis node_modules zu aligator. Wenn Sie dann npm link aligatoraus dem aligator-methodsVerzeichnis ausführen , verknüpfen Sie aligatorIhre 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 den npm link aligatorBefehl ausgeführt haben?

Wenn Sie nur eine Abhängigkeit aus einem lokalen Verzeichnis installieren möchten, können Sie npm installstattdessen versuchen, sie zu verwenden. Beispielsweise:

$ cd ~ / aligator-Methoden
$ npm install ../aligator


5
Vielen Dank für Ihre Bemühungen, dies zu beheben. Mein npm linkhat keine Fehler gezeigt. Das Problem in meinem Fall war, dass die Eigenschaft mainauf eine nicht vorhandene Datei zeigte. Was meine npm installdu hast Recht, brauchte ich nichts zu installieren , das npm linktut alles. Danke dafür, ich wusste es nicht.
Roc

1
Ich habe das gleiche Problem, habe aber keine Lösung gefunden. Wenn ich versuche, jedes verknüpfte Paket einzeln zu benötigen, funktionieren alle bis auf eines. Das nicht funktionierende Paket sagt nur: "Fehler: Modul kann nicht gefunden werden." -i-just-linked '".
Michael

@Michael sieht so aus, als hätte ich ein Modul in einem tieferen Verzeichnis verschachtelt, das versucht hat, "dynamisch" das fehlerhafte Modul zu fordern (dh der Name der an require () übergebenen Zeichenfolge wurde an das Modul übergeben), daher musste ich npm Link in das tiefere Verzeichnis.
Michael

4

Mein Problem war schließlich, dass Repo A npmund Repo B verwendet wurden yarn, also musste ich yarn linkRepo B ausführen, um es über Via npm link package-namein Repo A zu ziehen .


Sie, mein Herr, haben meinen Tag gemacht! Danke
Alec

2

Fix für meine Version dieses Problems; In npm v5.3.0 habe ich das node_modulesRepo 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 / ).


2

Was für mich funktionierte war:

  1. Löschen Sie das node_modulesModul sowohl in der Abhängigkeit als auch im Verbrauchermodul.
  2. Lauf npm unlink --no-save [dependency-module]
  3. Erneutes Verknüpfen mit den 2-Link-Befehlen gemäß npm-Link

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


1

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.jsonbehoben.


0

Bei Verwendung von peerDependency

Ich entwickle zwei Pakete stejsund stejs-loader. stejs-loaderhat stejsals peerDependency. Als ich lief npm link stejs-loaderund npm link stejsin meinem Projekt bekam ich einen Fehler, stejs-loaderder nicht gefunden werden konnte stejs. Ich habe es behoben, indem ich npm link stejsim Verzeichnis von ausgeführt habe stejs-loader.


0

Überprüfen Sie tsconfig moduleResolution

Wenn Sie wie ich zufällig die tsconfig modulevon es5in esnextoder so moduleResolutiongeändert haben, hat sich möglicherweise die Standardeinstellung geändert.

Ohne moduleResolutiondie 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ängt target- aber wahrscheinlich explizit auf "Knoten" setzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.