NPM: después de que no se encuentre el módulo "npm link"

89

Estoy desarrollando dos módulos para NodeJS, el primero con nombre aligatory el segundo aligator-methods. El segundo depende del primero en trabajar. Estoy desarrollando estos dos módulos al mismo tiempo y quiero un enlace global aligatorpara poder usarlo como si estuviera en el registro npm y lo acabo de instalar globalmente. Para hacer esto, la documentación de NPM dice que necesito usar npm linkpero no funciona.

Archivo package.jsonde módulo 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"
  }
}

Archivo package.jsonde módulo 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"
 }
}

En primer lugar, vinculé el módulo globalmente:

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

Esto, si no me equivoco, ha creado una referencia global de mi módulo aligatory ahora puedo usar este módulo desde cualquier lugar que quiera en la computadora.

Luego fui al otro módulo e intenté instalar la dependencia, pero me dio este resultado:

$ 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

Incluso intenté vincularlo directamente con:

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

Pero tampoco funcionó.

¿Alguna idea sobre qué es lo que podría estar pasando? Leí en alguna parte que tal vez tuvo algo que ver con mi instalación de node y npm porque fue hecho por Homebrew y, por lo tanto, a veces necesito usarlo sudo, parecía poco probable, pero probé lo que propusieron y tampoco funcionó.

Roc
fuente
En el código publicado, el nombre del primer módulo está escrito aligtore intenta referirse a él en el segundo módulo como aligator. Eso también puede hacer que su dependencia colapse.
Bruno Toffolo
@BrunoToffolo Sí, tienes razón, pero, en este caso, esto fue solo un error ortográfico en la publicación. Lo he corregido, gracias.
Roc
perdí 4 horas de mi miserable vida engañando a la configuración del paquete web: / ¡Me salvaste la vida! +1
Tom Sarduy
8
Vaya, tuve el mismo problema con el mainde mi package.json, ¡gracias por actualizar la respuesta con su solución!
mattyb
si ha encontrado la respuesta, sería una buena idea publicarla como respuesta y establecer la pregunta como resuelta con esa :)
Alberto S.

Respuestas:

39

Me encontré con este problema debido a NVM, estaba ejecutando una versión del nodo para la dependencia y otra para el dependiente.

linuxdan
fuente
1
¿Puede usted o alguien más enlazar a una ubicación donde resolver esto por casualidad?
Kevin Danikowski
4
En mi caso, necesito ejecutar 'nvm use <VERSION>' en ambos paquetes, donde VERSION era la misma para ambos paquetes.
linuxdan
29

Eliminar y package-lock.jsonluego ejecutar npm installnuevamente resolvió el problema para mí.

Sean Inge Asbjørnsen
fuente
2
Eso podría resolver el problema actual, pero posiblemente cree algunos más grandes. Los archivos de bloqueo juegan un papel muy importante y no deben eliminarse. En resumen: son los mecanismos los que garantizan que cada miembro del equipo utilice exactamente las mismas dependencias. Puede consultar esta respuesta en el desbordamiento de pila: stackoverflow.com/questions/54124033/… Pero leer la razón por la que existe en los documentos también es un buen comienzo. docs.npmjs.com/files/package-lock.json
SKuijers
Estaría dispuesto a aumentar esta respuesta si hubiera una nota en negrita que indique que este debería ser un último recurso. Como señala @SKuijers, los archivos de bloqueo juegan un papel esencial en el mantenimiento de las versiones de dependencia. Presumiblemente, las versiones de dependencia también se han bloqueado en el package.json, pero la mayoría de las veces veo que package-lock.jsono yarn.lockhan sido los guardianes de esto.
FrostyDog
29

El problema era que la mainpropiedad de package.jsonapuntaba a un archivo inexistente. Parece que el problema puede ocurrir debido a múltiples razones, así que asegúrese de ver otras respuestas.

Roc
fuente
Dios mío, quiero votar a favor de esto 50 veces y palmearme una vez por cada voto a favor.
Ben
Interesante saber que el proyecto requiere main. En su mayoría lo hice sin él, pero supongo que crea estos problemas menores.
cst1992
¡Buen hallazgo! Vi tu respuesta e inmediatamente supe que este era mi problema :).
slashp
11

Cuando ejecuta por primera vez npm linkdesde el aligatordirectorio, crea un enlace desde su directorio global node_modules a aligator. Luego, cuando ejecuta npm link aligatordesde el aligator-methodsdirectorio, se vincula aligatordesde sus módulos de nodo instalados localmente a la fuente original (como muestra la salida en su ejemplo anterior). Una vez hecho esto, no debería ser necesario instalar más, ya que ya está "instalado". ¿Qué errores ves después de ejecutar el npm link aligatorcomando?

Si solo desea instalar una dependencia desde un directorio local, puede intentar usar en su npm installlugar. Por ejemplo:

$ cd ~ / aligator-métodos
$ npm install ../aligator

colorantes
fuente
5
Gracias por tu esfuerzo para resolver esto. Mi npm linkno mostró ningún error. El problema en mi caso fue que la propiedad mainapuntaba a un archivo inexistente. En cuanto a mi npm install, tienes razón, no necesitaba instalar nada, lo npm linkhace todo. Gracias por eso no lo sabía.
Roc
1
Tengo el mismo problema, pero no he encontrado una solución ... si trato de requerir individualmente cada paquete vinculado, todos menos uno funcionan ... el que no funciona solo dice: "Error: No se puede encontrar el módulo del módulo ' -yo-recién-vinculado '".
Michael
@Michael parece que tenía un módulo anidado en un directorio más profundo que estaba tratando de requerir "dinámicamente" el módulo que estaba fallando (es decir, el nombre de la cadena pasada a require () se pasó al módulo), por lo tanto, tuve que npm enlace al directorio más profundo.
Michael
4

Mi problema terminó siendo que el repositorio A estaba usando npmy el repositorio B estaba usando yarn, por lo que necesitaba ejecutarlo yarn linken el repositorio B para poder npm link package-nameingresarlo a través del repositorio A.

FrostyDog
fuente
¡Usted, señor, hizo mi día! Gracias
Alec
2

Solución para mi versión de este problema; en npm v5.3.0, eliminé node_modulesdel repositorio que estaba vinculando a otro proyecto.

Descubrí que después de npm v3, intentan poner todas las dependencias de node_modules en un directorio de node_modules (uno en su proyecto) para aplanar la estructura tanto como sea posible ( http://codetunnel.io/npm-5-changes-to-npm -enlace / ).

crollywood
fuente
2

Lo que funcionó para mí fue:

  1. Elimine node_modulestanto en la dependencia como en el módulo de consumidor.
  2. correr npm unlink --no-save [dependency-module]
  3. Vuelva a vincular con los comandos de 2 enlaces según npm-link

Ahora puedo probar completamente mi módulo no publicado localmente.

Además, hay un comando npm pack que puede ayudarlo a probar sus módulos no publicados, aunque no tan robusto.

npm-pack

SandeepJ
fuente
1

Para mí, esto sucedió cuando disminuí el número de versión de mi paquete local de 0.1.0 a 0.0.1. Y en los proyectos en los que me vinculé a este paquete, todavía estaba usando el número de versión más alto. La actualización de las dependencias lo package.jsonsolucionó.

Flion
fuente
0

Al usar peerDependency

Estoy desarrollando dos paquetes stejs, y stejs-loader. stejs-loadertiene stejscomo peerDependency. Cuando ejecuté npm link stejs-loadery npm link stejsen mi proyecto, recibía un error que stejs-loaderno podía encontrar stejs. Lo arreglé ejecutándolo npm link stejsen el directorio de stejs-loader.

ItsaMeTuni
fuente
0

Verifique el módulo tsconfig Resolución

Si, como yo, cambiaste tsconfig modulede es5a esnexto algo, entonces el moduleResolutionvalor predeterminado puede haber cambiado.

Si no moduleResolutionse establece en "nodo", el mecanografiado no resolverá los paquetes node_modules.

Puede leer en la página Opciones del compilador acerca de cómo el valor predeterminado depende del valor de module, cuyo valor predeterminado a su vez depende de target, pero probablemente configúrelo como "nodo" explícitamente.

Matías
fuente