Je développe deux modules pour NodeJS, le premier nommé aligator
et le second aligator-methods
. Le deuxième dépend du premier à travailler. Je développe ces deux modules en même temps et je souhaite créer un lien global aligator
pour pouvoir l'utiliser comme sur le registre npm et je viens de l'installer globalement. Pour faire cette documentation NPM dit que je dois utiliser npm link
mais cela ne fonctionne pas.
Fichier package.json
du module 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"
}
}
Fichier package.json
du module 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"
}
}
Tout d'abord, j'ai lié le module globalement:
$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Ceci si je ne me trompe pas a créé une référence globale de mon module aligator
et maintenant je peux utiliser ce module de partout où je veux dans l'ordinateur.
Ensuite, je suis allé à l'autre module et j'ai essayé d'installer la dépendance mais cela m'a donné cette sortie:
$ 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
J'ai même essayé de le lier directement avec:
$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Mais cela n'a pas fonctionné non plus.
Des pensées sur ce qui pourrait se passer? J'ai lu quelque part que cela avait peut-être quelque chose à voir avec mon installation de node et npm parce qu'il a été fait par Homebrew et que parfois j'ai besoin de l'utiliser sudo
, cela semblait peu probable mais j'ai essayé ce qu'ils proposaient et cela n'a pas fonctionné non plus.
aligtor
et vous essayez de vous y référer dans le deuxième module commealigator
. Cela peut également faire planter votre dépendance.main
de monpackage.json
, merci d'avoir mis à jour la réponse avec votre correctif!Réponses:
J'ai rencontré ce problème à cause de NVM, j'utilisais une version de nœud pour la dépendance et une autre pour la personne à charge.
la source
La suppression
package-lock.json
puis la réexécution ontnpm install
résolu le problème pour moi.la source
package.json
, mais la plupart du temps, je vois que lepackage-lock.json
ouyarn.lock
ont été les gardiens de cela.Le problème était que la
main
propriété depackage.json
pointait vers un fichier inexistant. Il semble que le problème puisse survenir pour plusieurs raisons, alors assurez-vous de jeter un coup d'œil à d'autres réponses.la source
main
. La plupart du temps, je m'en suis passé, mais je suppose que cela crée ces problèmes mineurs.Lorsque vous exécutez pour la première fois à
npm link
partir dualigator
répertoire, vous créez un lien à partir de votre répertoire global node_modules versaligator
. Ensuite, lorsque vous exécutez le ànpm link aligator
partir dualigator-methods
répertoire, vousaligator
créez un lien depuis vos node_modules installés localement vers la source d'origine (comme le montre la sortie dans votre exemple ci-dessus). Une fois cela fait, il ne devrait plus être nécessaire d'installer car il est déjà "installé". Quelles erreurs voyez-vous après avoir exécuté lanpm link aligator
commande?Si vous souhaitez simplement installer une dépendance à partir d'un répertoire local, vous pouvez simplement essayer d'utiliser à la
npm install
place. Par exemple:la source
npm link
n'a montré aucune erreur. Le problème dans mon cas était que la propriétémain
pointait vers un fichier inexistant . Quant à moi,npm install
vous avez raison, je n'ai pas besoin d'installer quoinpm link
que ce soit pour tout faire. Merci pour ça, je ne le savais pas.Mon problème a finalement été que le repo A utilisait
npm
et le repo B utilisaityarn
, donc je devais exécuteryarn link
dans le repo B afin de le récupérer via lenpm link package-name
repo A.la source
Correctif pour ma version de ce problème; dans npm v5.3.0, j'ai supprimé
node_modules
du repo que je liais à un autre projet.J'ai découvert qu'après npm v3, ils essayaient de mettre toutes les dépendances node_modules dans un répertoire node_modules (un dans votre projet) pour aplatir la structure autant que possible ( http://codetunnel.io/npm-5-changes-to-npm -link / ).
la source
Ce qui a fonctionné pour moi était de:
node_modules
dans la dépendance et le module consommateur.npm unlink --no-save [dependency-module]
Maintenant, je suis en mesure de tester entièrement mon module non publié localement.
De plus, il existe une commande npm pack qui peut vous aider à tester vos modules non publiés, mais pas aussi robustes.
npm-pack
la source
Pour moi, cela s'est produit lorsque j'ai diminué le numéro de version de mon package local de 0.1.0 à 0.0.1. Et dans les projets où j'ai lié à ce package, j'utilisais toujours le numéro de version le plus élevé. La mise à jour des dépendances a été
package.json
corrigée.la source
Lors de l'utilisation de peerDependency
Je développe deux packages
stejs
, etstejs-loader
.stejs-loader
astejs
comme unpeerDependency
. Quand j'ai courunpm link stejs-loader
etnpm link stejs
dans mon projet, j'obtenais une erreur quistejs-loader
ne pouvait pas être trouvéestejs
. Je l'ai réparé en exécutantnpm link stejs
dans le répertoire destejs-loader
.la source
Vérifiez le module tsconfig
Si, comme moi, vous avez changé le tsconfig
module
dees5
àesnext
ou quelque chose, alors lamoduleResolution
valeur par défaut a peut-être changé.Sans
moduleResolution
être défini sur "node", le typecript ne résoudra pas les packages node_modules.Vous pouvez lire sur la page Options du compilateur comment la valeur par défaut dépend de la valeur de
module
, dont la valeur par défaut dépend à son tourtarget
- mais définissez-la probablement sur "node" explicitement.la source