Je veux faire quelque chose comme ça, alors npm install
installe également package.json
des ../somelocallib
ou plus important encore ses dépendances.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Je veux faire quelque chose comme ça, alors npm install
installe également package.json
des ../somelocallib
ou plus important encore ses dépendances.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Réponses:
Cette fonctionnalité a été implémentée dans la version 2.0.0 de npm. Exemple:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
L'un des chemins suivants est également valide:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
Le package local sera copié dans le préfixe ( ./node-modules
).
Mettez somelocallib
comme dépendance dans votre package.json
comme d'habitude:
"dependencies": {
"somelocallib": "0.0.x"
}
Ensuite, exécutez npm link ../somelocallib
et npm installera la version sur laquelle vous travaillez en tant que lien symbolique .
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
Référence: lien (1)
npm dedup
pour résoudre ce problème. npmjs.org/doc/cli/npm-dedupe.html
npm install <folder>
, installez le package dans le répertoire en tant que lien symbolique dans le projet en cours.
Il est désormais possible de spécifier package.json
directement les chemins d'installation du module Node local dans votre . De la documentation:
Chemins locaux
Depuis la version 2.0.0, vous pouvez fournir un chemin vers un répertoire local contenant un package. Les chemins locaux peuvent être enregistrés en utilisant
npm install -S
ounpm install --save
, en utilisant l'un de ces formulaires:../foo/bar ~/foo/bar ./foo/bar /foo/bar
dans ce cas, ils seront normalisés à un chemin relatif et ajoutés à votre
package.json
. Par exemple:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Cette fonctionnalité est utile pour le développement local hors ligne et la création de tests qui nécessitent l'installation de npm là où vous ne voulez pas toucher un serveur externe, mais ne doit pas être utilisée lors de la publication de packages dans le registre public.
"bar": "file:///home/user/src/foo/bar"
node:onbuild
images standard copient uniquement le répertoire en cours et ne contiennent donc rien ../foo
.
npm install
proviennent ou un autre référentiel git sur le LAN? Lorsque j'essaie l'installation ci-dessus et npm à partir de git + ssh, il semble regarder dans le répertoire node_modules et ne pas essayer de passer en revue git + ssh même si c'est ainsi que j'installe le package de niveau supérieur.
Cela fonctionne pour moi.
Placez ce qui suit dans votre fichier package.json
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
.gitignore
dans le dossier du module, créé .npmignore
et la première fois que je l'ai exécuté, il a appliqué 777 de manière récursive sur tous les dossiers sauf node_modules
. Mais oui, il a installé les dépendances. Utilisation de npm version 1.4.14.
"dependencies": { "my-own-module": "file:../my-own-module" }
?
npm link
est que vous n'avez pas besoin de le faire à npm install
chaque fois pour mettre à jour vos dépendances.
Si vous souhaitez automatiser davantage cela, car vous vérifiez votre module dans le contrôle de version et ne voulez pas vous fier aux développeurs qui se souviennent du lien npm, vous pouvez l'ajouter à votre section "scripts" de package.json:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Cela semble au-delà du hacky, mais cela semble "fonctionner". Vous avez obtenu l'astuce de ce numéro npm: https://github.com/npm/npm/issues/1558#issuecomment-12444454
postinstall
et postupdate
au lieu de preinstall
et preupdate
?
Voici comment vous allez ajouter des dépendances locales:
npm install file:src/assets/js/FILE_NAME
Ajoutez-le à package.json depuis NPM:
npm install --save file:src/assets/js/FILE_NAME
Ajoutez directement à package.json comme ceci:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
Voici le package.json que vous utiliserez pour le projet maître:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Là, se ./somelocallib
trouve la référence au dossier de la bibliothèque par rapport au projet maître package.json .
Référence: https://docs.npmjs.com/files/package.json#local-paths
Gérez vos dépendances de bibliothèque.
En plus de courir npm install
, vous devrez courir (cd node_modules/somelocallib && npm install)
.
Il s'agit d'un bogue connu avec NPM.
Référence: https://github.com/npm/npm/issues/1341 (recherche d'une référence plus à jour)
Enregistrez votre maître package.lock
et votre somelocallib/package.lock
dans votre gestionnaire de code source.
Ensuite, dans votre Dockerfile, utilisez:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
J'utilise des parenthèses dans mes (cd A && B)
constructions pour rendre l'opération idempotente.
Je sais que ça npm install ../somelocallib
marche.
Cependant, je ne sais pas si la syntaxe que vous montrez dans la question fonctionnera ou non package.json
...
Malheureusement, doc semble ne mentionner que l'URL comme dépendance.
Essayez de file:///.../...tar.gz
pointer vers une bibliothèque locale zippée ... et dites-nous si cela fonctionne.
Cela a fonctionné pour moi: d'abord, assurez-vous que les répertoires npm ont le bon utilisateur
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
Ensuite, votre lien dans votre package.json le répertoire
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
npm install
.
En fait, à partir de npm 2.0, il existe désormais un support pour les chemins locaux (voir ici ).
Curieux ..... au moins sur Windows (mon npm est 3. quelque chose), je devais faire:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
Quand je l'ai fait, npm install ../module1 --save
cela a abouti à des chemins absolus et non relatifs selon la documentation.
Je me suis encore un peu amusé et j'ai déterminé que ../xxx
c'était suffisant.
Plus précisément, j'ai vérifié les modules de nœud local pour dire d: \ build \ module1, d: \ build \ module2 et mon projet de nœud (application) dans d: \ build \ nodeApp.
Pour «installer», je:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
package.json de module1 a une dépendance de "module2": "../module2"; module2 n'a aucune dépendance locale; nodeApp a les dépendances "module1": "../module1" et "module2": "../module2".
Je ne sais pas si cela ne fonctionne que pour moi car les 3 dossiers (module1, module2 et nodeApp) se trouvent au même niveau .......
Deux étapes pour un développement local complet: