Estoy desarrollando dos módulos para NodeJS, el primero con nombre aligator
y 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 aligator
para 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 link
pero no funciona.
Archivo package.json
de 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.json
de 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 aligator
y 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ó.
aligtor
e intenta referirse a él en el segundo módulo comoaligator
. Eso también puede hacer que su dependencia colapse.main
de mipackage.json
, ¡gracias por actualizar la respuesta con su solución!Respuestas:
Me encontré con este problema debido a NVM, estaba ejecutando una versión del nodo para la dependencia y otra para el dependiente.
fuente
Eliminar y
package-lock.json
luego ejecutarnpm install
nuevamente resolvió el problema para mí.fuente
package.json
, pero la mayoría de las veces veo quepackage-lock.json
oyarn.lock
han sido los guardianes de esto.El problema era que la
main
propiedad depackage.json
apuntaba a un archivo inexistente. Parece que el problema puede ocurrir debido a múltiples razones, así que asegúrese de ver otras respuestas.fuente
main
. En su mayoría lo hice sin él, pero supongo que crea estos problemas menores.Cuando ejecuta por primera vez
npm link
desde elaligator
directorio, crea un enlace desde su directorio global node_modules aaligator
. Luego, cuando ejecutanpm link aligator
desde elaligator-methods
directorio, se vinculaaligator
desde 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 elnpm link aligator
comando?Si solo desea instalar una dependencia desde un directorio local, puede intentar usar en su
npm install
lugar. Por ejemplo:fuente
npm link
no mostró ningún error. El problema en mi caso fue que la propiedadmain
apuntaba a un archivo inexistente. En cuanto a minpm install
, tienes razón, no necesitaba instalar nada, lonpm link
hace todo. Gracias por eso no lo sabía.Mi problema terminó siendo que el repositorio A estaba usando
npm
y el repositorio B estaba usandoyarn
, por lo que necesitaba ejecutarloyarn link
en el repositorio B para podernpm link package-name
ingresarlo a través del repositorio A.fuente
Solución para mi versión de este problema; en npm v5.3.0, eliminé
node_modules
del 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 / ).
fuente
Lo que funcionó para mí fue:
node_modules
tanto en la dependencia como en el módulo de consumidor.npm unlink --no-save [dependency-module]
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
fuente
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.json
solucionó.fuente
Al usar peerDependency
Estoy desarrollando dos paquetes
stejs
, ystejs-loader
.stejs-loader
tienestejs
comopeerDependency
. Cuando ejecuténpm link stejs-loader
ynpm link stejs
en mi proyecto, recibía un error questejs-loader
no podía encontrarstejs
. Lo arreglé ejecutándolonpm link stejs
en el directorio destejs-loader
.fuente
Verifique el módulo tsconfig Resolución
Si, como yo, cambiaste tsconfig
module
dees5
aesnext
o algo, entonces elmoduleResolution
valor predeterminado puede haber cambiado.Si no
moduleResolution
se 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 detarget
, pero probablemente configúrelo como "nodo" explícitamente.fuente