web-dev-qa-db-fra.com

Installation d'un module local à l'aide de npm?

J'ai un dépôt de module téléchargé, je veux l'installer localement, pas globalement dans un autre répertoire?

Quel est un moyen facile de faire cela?

347
fancy

vous venez de fournir un argument _<folder>_ à npm install , l'argument doit pointer vers le dossier local au lieu du nom du package:

_npm install /path
_
351
fancy

De la documentation de npm-link :

Dans le répertoire du module local:

$ cd ./package-dir
$ npm link

Dans le répertoire du projet pour utiliser le module:

$ cd ./project-dir
$ npm link package-name

Ou en une fois en utilisant des chemins relatifs:

$ cd ./project-dir
$ npm link ../package-dir

Ceci équivaut à utiliser deux commandes ci-dessus sous le capot.

430
Rich Apodaca

Puisque demandé et répondu par la même personne, j'ajouterai un lien de npm comme alternative.

de docs:

C'est pratique pour installer vos propres fichiers, afin que vous puissiez travailler dessus et les tester de manière itérative sans avoir à reconstruire continuellement.

cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency

[Modifier] À partir de NPM 2.0, vous pouvez déclarer des dépendances locales dans package.json.

"dependencies": {
    "bar": "file:../foo/bar"
  }
132
Luke W

Aucune de ces approches (dépendance de fichier npm link ou package.json) ne fonctionne si le module local possède des dépendances entre homologues que vous souhaitez uniquement installer dans la portée de votre projet.

Par exemple:

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

Dans ce scénario, npm configure le node_modules/ de myproject comme suit:

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

Lorsque le nœud charge mymodule et que require('foo'), il résout le lien symbolique mymodule et ne recherche que dans /local/mymodule/node_modules/ (et ses ancêtres) foo, qui il ne trouve pas. Au lieu de cela, nous voulons que le noeud regarde dans /local/myproject/node_modules/, car c'est là que notre projet est exécuté et où foo est installé.

Nous avons donc besoin d'un moyen d'indiquer au noeud pas de résoudre ce lien symbolique lorsque vous recherchez foo, ou nous avons besoin d'un moyen d'indiquer à npm d'installer un copie de mymodule lorsque la syntaxe de dépendance de fichier est utilisée dans package.json. Malheureusement, je n'ai pas trouvé le moyen de faire non plus :(

7
Paul Medynski