NPM: dopo che il modulo "npm link" non è stato trovato


93

Sto sviluppando due moduli per NodeJS, il primo denominato aligatore il secondo aligator-methods. Il secondo dipende dal primo per funzionare. Sto sviluppando questi due moduli contemporaneamente e voglio un collegamento globale in aligatormodo da poterlo utilizzare come se fosse nel registro npm e l'ho appena installato a livello globale. Per fare questo, la documentazione di NPM dice che devo usare npm linkma non funziona.

File package.jsondel modulo 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"
  }
}

File package.jsondel modulo 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"
 }
}

Prima di tutto ho collegato il modulo a livello globale:

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Questo se non sbaglio ha creato un riferimento globale del mio modulo aligatore ora posso usare questo modulo da qualsiasi punto del computer.

Quindi sono andato all'altro modulo e ho provato a installare la dipendenza ma mi ha dato questo output:

$ 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

Ho anche provato a collegarlo direttamente con:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Ma non ha funzionato neanche.

Qualche idea su cosa potrebbe succedere? Ho letto da qualche parte che forse aveva qualcosa a che fare con la mia installazione di node e npm perché è stato fatto da Homebrew e quindi a volte devo usarlo sudo, sembrava improbabile ma ho provato quello che hanno proposto e non ha funzionato neanche.


Nel codice pubblicato, il nome del primo modulo è scritto aligtore si tenta di fare riferimento ad esso nel secondo modulo come aligator. Ciò potrebbe anche causare un arresto anomalo della dipendenza.
Bruno Toffolo

@BrunoToffolo Sì, hai ragione, ma, in questo caso, si trattava solo di un errore di ortografia nel post. L'ho corretto, grazie.
Roc

perso 4 ore della mia vita miserabile ingannando la configurazione del webpack: / Mi hai salvato la vita! +1
Tom Sarduy

8
Wow ho avuto lo stesso problema con il mainmio package.json, grazie per aver aggiornato la risposta con la tua correzione!
mattyb

se hai trovato la risposta, sarebbe una buona idea postarla come risposta e impostare la domanda come risolta con quella :)
Alberto S.

Risposte:


40

Mi sono imbattuto in questo problema a causa di NVM, stavo eseguendo una versione di nodo per la dipendenza e un'altra per il dipendente.


1
Puoi tu o qualcun altro collegarti a una posizione in cui risolvere questo problema per caso?
Kevin Danikowski

4
Nel mio caso ho bisogno di eseguire 'nvm use <VERSION>' su entrambi i pacchetti, dove VERSION era la stessa per entrambi i pacchetti.
linuxdan

34

L'eliminazione package-lock.jsone l'esecuzione di npm installnuovo hanno risolto il problema per me.


3
Ciò potrebbe risolvere il problema attuale, ma forse ne crea di più grandi. I file di blocco svolgono un ruolo molto importante e non devono essere eliminati. In breve: sono i meccanismi che garantiscono che ogni membro del team utilizzi le stesse identiche dipendenze. Puoi controllare questa risposta su stack overflow: stackoverflow.com/questions/54124033/… Ma anche leggere il motivo per cui esiste nei documenti è un buon inizio. docs.npmjs.com/files/package-lock.json
SKuijers

1
Sarei disposto ad aumentare questa risposta se ci fosse una nota in grassetto che indica che questa dovrebbe essere l'ultima risorsa. Come sottolinea @SKuijers, i file di blocco svolgono un ruolo essenziale nel mantenimento delle versioni delle dipendenze. Presumibilmente, anche le versioni delle dipendenze sono state bloccate package.json, ma la maggior parte delle volte vedo che package-lock.jsono yarn.locksono stati i gatekeeper per questo.
FrostyDog

33

Il problema era che la mainproprietà di package.jsonpuntava a un file inesistente. Sembra che il problema possa verificarsi a causa di molteplici motivi, quindi assicurati di dare un'occhiata ad altre risposte.


1
omg voglio votare a favore di questo 50 volte e facepalm me stesso una volta per ogni voto positivo.
Ben

Interessante sapere che il progetto richiede main. Per lo più ne ho fatto a meno, ma immagino che crei questi problemi minori.
cst1992

Bella scoperta! Ho visto la tua risposta e ho subito capito che questo era il mio problema :).
slashp

12

Quando esegui npm linkper la prima volta dalla aligatordirectory, crei un collegamento dalla directory globale node_modules a aligator. Quindi, quando esegui il npm link aligatordalla aligator-methodsdirectory, ti colleghi aligatordai tuoi node_modules installati localmente alla fonte originale (come l'output mostra nell'esempio sopra). Una volta fatto questo, non dovrebbe essere più necessario installarlo poiché è già "installato". Quali errori vengono visualizzati dopo aver eseguito il npm link aligatorcomando?

Se vuoi solo installare una dipendenza da una directory locale, potresti semplicemente provare a usare npm install. Per esempio:

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


6
Grazie per il tuo impegno per risolvere questo problema. Il mio npm linknon ha mostrato errori. Il problema nel mio caso era che la proprietà mainpuntava a un file inesistente. Per quanto riguarda il mio npm installhai ragione, non ho bisogno di installare nulla il npm linkfa tutto. Grazie per questo non lo sapevo.
Roc

1
Sto riscontrando lo stesso problema, ma non ho trovato una soluzione ... se provo a richiedere individualmente ogni pacchetto collegato, tutti tranne uno funzionano ... quello che non funziona dice semplicemente: "Errore: Impossibile trovare il modulo 'modulo -i-appena-linkato '".
Michael

@Michael sembra che avessi un modulo annidato in una directory più profonda che stava cercando di richiedere "dinamicamente" il modulo che non funzionava (cioè il nome della stringa passata a require () è stato passato al modulo), quindi ho dovuto npm link nella directory più profonda.
Michael,

4

Il mio problema è finito per essere che il repository A stava usando npme il repository B stava usando yarn, quindi dovevo eseguire yarn linknel repository B per inserirlo tramite il npm link package-namerepository A.


Lei, signore, ha reso la mia giornata! Grazie
Alec

3

Quello che ha funzionato per me è stato:

  1. Elimina il node_modulesmodulo sia nella dipendenza che nel consumatore.
  2. Correre npm unlink --no-save [dependency-module]
  3. ricollega con i comandi 2-link come per npm-link

Ora sono in grado di testare completamente il mio modulo non pubblicato a livello locale.

Inoltre, c'è un comando npm pack che può aiutarti a testare i tuoi moduli non pubblicati, sebbene non altrettanto robusti.

pacchetto npm


2

Risolto il problema con la mia versione di questo problema; in npm v5.3.0, ho rimosso node_modulesdal repository che stavo collegando a un altro progetto.

Ho scoperto che dopo npm v3 provano a mettere tutte le dipendenze node_modules in una directory node_modules (una nel tuo progetto) per appiattire la struttura il più possibile ( http://codetunnel.io/npm-5-changes-to-npm -link / ).


1

Per me questo è successo quando ho ridotto il numero di versione del mio pacchetto locale da 0.1.0 a 0.0.1. E nei progetti in cui mi collegavo a questo pacchetto usavo ancora il numero di versione più alto. Aggiornamento delle dipendenze in package.jsonrisolto.


0

Quando si utilizza peerDependency

Sto sviluppando due pacchetti stejs, e stejs-loader. stejs-loaderha stejscome file peerDependency. Quando ho eseguito npm link stejs-loadere npm link stejsnel mio progetto ho ricevuto un errore che stejs-loadernon riuscivo a trovare stejs. L'ho risolto eseguendo npm link stejsnella directory di stejs-loader.


0

Controllare tsconfig moduleResolution

Se come me, ti è capitato di cambiare tsconfig moduleda es5a esnexto qualcosa del genere, l' moduleResolutionimpostazione predefinita potrebbe essere cambiata.

Senza moduleResolutionessere impostato su "node", il typescript non risolverà i pacchetti node_modules.

È possibile leggere nella pagina Opzioni del compilatore come il valore predefinito dipende dal valore di module, il cui valore predefinito dipende a sua volta target, ma probabilmente impostarlo esplicitamente su "nodo".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.