comment spécifier des modules locaux en tant que dépendances de paquet npm

J’ai une application qui possède le jeu habituel de dépendances sur les modules tiers (ex: ‘express’) spécifiés dans le fichier package.json sous dépendances. Par exemple

"express" : "3.1.1" 

Je voudrais structurer mon propre code de manière modulaire et installer un ensemble de modules locaux (ce qui signifie dans le système de fichiers que je suis actuellement) par package.json. Je sais que je peux installer un module local en exécutant:

 npm install path/to/mymodule 

Cependant, je ne sais pas comment y arriver via la structure de dépendances package.json. L’utilisation de l’option --save dans cette commande consiste simplement à placer "mymodule": "0.0.0" dans mon package.json (ne fait pas référence à l’emplacement du chemin de fichier). Si je supprime ensuite la version installée de node_modules et que j’essaie de la réinstaller à partir du package.json, elle échoue (car elle recherche “mymodule” dans le registre central et ne semble pas localement).

Je suis sûr que c’est une façon de dire à la structure "dependencies": {} que je veux qu’elle soit installée à partir d’un chemin de système de fichiers, mais je ne sais pas comment.

quelqu’un d’autre a ce problème? Merci.

A partir de NPM 2.0.0, l’importation de dépendances locales est prise en charge en mode natif. Cela a été documenté par danilopopeye en réponse à une question similaire . J’ai copié sa réponse ici pour aider quiconque a besoin de trouver la bonne réponse, car cette question est très importante dans les résultats de recherche de Google.

Cette fonctionnalité a été implémentée dans la version 2.0.0 de npm. Par exemple:

 { "name": "baz", "dependencies": { "bar": "file:../foo/bar" } } 

Les chemins suivants sont également valides:

 ../foo/bar ~/foo/bar ./foo/bar /foo/bar 

Voir: Dépendance locale dans package.json

Il semblerait que la réponse soit npm link : https://docs.npmjs.com/cli/link

Je ne pouvais pas trouver un bon moyen à la fin, donc je suis allé pour créer un répertoire appelé local_modules , puis ajouté ce bashscript au package.json dans scripts-> preinstall

 #!/bin/sh for i in $(find ./local_modules -type d -maxdepth 1) ; do packageJson="${i}/package.json" if [ -f "${packageJson}" ]; then echo "installing ${i}..." npm install "${i}" fi done 

Après beaucoup de difficultés avec la commande npm link (solution suggérée pour développer des modules locaux sans les publier dans un registre ou conserver une copie distincte dans le dossier node_modules), j’ai créé un petit module npm pour aider à résoudre ce problème.

Le correctif nécessite deux étapes faciles .

Premier:

 npm install lib-manager --save-dev 

Deuxièmement, ajoutez ceci à votre package.json :

 { "name": "yourModuleName", // ... "scripts": { "postinstall": "./node_modules/.bin/local-link" } } 

Plus de détails sur https://www.npmjs.com/package/lib-manager . J’espère que ça aide quelqu’un.

S’il est acceptable de publier simplement vos modules préinstallés dans node_modules avec vos autres fichiers, vous pouvez le faire comme ceci:

 // ./node_modules/foo/package.json { "name":"foo", "version":"0.0.1", "main":"index.js" } // ./package.json ... "dependencies": { "foo":"0.0.1", "bar":"*" } // ./app.js var foo = require('foo'); 

Vous pouvez également vouloir stocker votre module sur git et dire à votre parent package.json d’installer la dépendance à partir de git: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies