Je veux faire quelque chose comme ceci, donc npm install
installe également le package.json
de ../somelocallib
ou plus important encore, ses dépendances.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Cette fonctionnalité était implémentée dans la version 2.0.0 de npm. Exemple:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
Les chemins suivants sont également valides:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
Le paquet 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, lancez npm link ../somelocallib
et npm installera la version sur laquelle vous travaillez sous forme de lien symbolique .
[email protected] /private/tmp/app
└── [email protected] -> /private/tmp/somelocallib
Référence: link (1)
Il est maintenant possible de spécifier directement les chemins d'installation du module Node dans votre package.json
. De la docs:
Chemins locaux
Depuis la version 2.0.0, vous pouvez fournir un chemin d'accès à 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’une des formes suivantes:../foo/bar ~/foo/bar ./foo/bar /foo/bar
dans ce cas, ils seront normalisés en 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 hors ligne local et la création de tests nécessitant une installation de npm où vous ne voulez pas utiliser de serveur externe, mais ne doit pas être utilisé lors de la publication de packages dans le registre public.
Cela fonctionne pour moi.
Placez ce qui suit dans votre fichier package.json
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
Si vous souhaitez automatiser davantage cette opération, car vous contrôlez votre module dans le contrôle de version et que vous ne voulez pas que les développeurs se souviennent de npm link, vous pouvez l'ajouter à votre section "scripts" de package.json:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Cela se sent au-delà du hacky, mais cela semble "fonctionner". Vous avez eu le conseil de ce numéro npm: https://github.com/npm/npm/issues/1558#issuecomment-12444454
Voici comment vous allez ajouter des dépendances locales:
npm install file:src/assets/js/FILE_NAME
Ajoutez-le à package.json à partir de NPM:
npm install --save file:src/assets/js/FILE_NAME
Ajouter 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"
....
Deux étapes pour un développement local complet:
Je sais que npm install ../somelocallib
fonctionne.
Cependant, je ne sais pas si la syntaxe que vous indiquez dans la question fonctionnera à partir de package.json
...
Malheureusement, doc semble ne mentionner que l'URL en tant que dépendance.
Essayez file:///.../...tar.gz
, en pointant sur une bibliothèque locale compressé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 package.json avec le répertoire
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
En fait, depuis npm 2.0, il existe maintenant un support pour les chemins locaux (voir here ).
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 j'ai fait un npm install ../module1 --save
il en a résulté des chemins absolus et non relatifs par rapport à la documentation.
J'ai déconné un peu plus et déterminé que ../xxx
était suffisant.
Plus précisément, j'ai les modules de nœud locaux extraits 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
le package.json de module1 a une dépendance de "module2": "../module2"; le module2 n'a pas de dépendance locale; nodeApp a des dépendances "module1": "../module1" et "module2": "../module2".
Je ne sais pas si cela ne fonctionne que pour moi puisque les 3 dossiers (module1, module2 et nodeApp) sont au même niveau .......
Voici le package.json que vous utiliserez pour le projet maître:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Là, ./somelocallib
est la référence au dossier de la bibliothèque par rapport au package principal du projet.json .
Référence: https://docs.npmjs.com/files/package.json#local-paths
Gérez les dépendances de votre bibliothèque.
En plus d'exécuter npm install
, vous devrez également exécuter (cd node_modules/somelocallib && npm install)
.
C'est un bug connu avec NPM.
Référence: https://github.com/npm/npm/issues/1341 (recherche d'une référence plus récente)
Enregistrez votre maître package.lock
et votre somelocallib/package.lock
dans votre gestionnaire de code source.
Ensuite, dans votre utilisation de Dockerfile:
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 constructions (cd A && B)
pour rendre l'opération idempotente.