web-dev-qa-db-fra.com

Comment importer des modules globaux dans un noeud? Je reçois le message "Erreur: Impossible de trouver le module <module>"?

J'essaie d'installer Node sur Mac OSX Lion. Tout semble bien fonctionner, mais je n'arrive pas à importer quoi que ce soit des modules de mon dossier de modules globaux. J'ai l'erreur,

Error: Cannot find module <module>

Si je lance ceci: node -e require.paths, la réponse que je reçois est la suivante:

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

Ce qui est correct, mes modules sont en effet installés dans/usr/local/lib/node_modules. Cependant, lorsque j'essaye de lancer un script, je reçois ceci:

Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/Users/Me/node/server.js:2:10)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

Mon .bash_profile ressemble à ceci:

export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

J'apprécierais vraiment de l'aide, je ne sais pas pourquoi je ne peux importer aucune bibliothèque.

127
Hanpan

Si vous utilisez npm> = 1.0, vous pouvez utiliser npm link <global-package> pour créer un lien local vers un paquet déjà installé globalement. ( Avertissement: le système d'exploitation doit prendre en charge les liens symboliques. )

Cependant, cela ne va pas sans problèmes.

le lien npm est un outil de développement. C'est génial pour la gestion des paquetages sur votre boîte de développement locale. Mais déployer avec npm link, c’est fondamentalement poser des problèmes, car il est très facile de mettre à jour des choses sans s’en rendre compte.

Alternativement, vous pouvez installer les packages localement ou globalement.

Pour plus d'informations, voir

103
Tadeusz Wójcik

Vous pouvez utiliser npm link pour créer un lien symbolique vers votre package global dans votre dossier de projets.

Exemple:

$ npm install -g express
$ cd [local path]/project
$ npm link express

Tout ce qu’il fait est de créer un dossier node_modules local, puis de créer un lien symbolique express -> [répertoire global]/node_modules/express, qui peut ensuite être résolu par require('express')

60
Nick Sotiros

Node.js utilise la variable d'environnement NODE_PATH Pour permettre la spécification de répertoires supplémentaires à inclure dans le chemin de recherche du module. Vous pouvez utiliser npm lui-même pour vous indiquer où les modules globaux sont stockés avec la commande npm root -g. Donc, en réunissant ces deux éléments, vous pouvez vous assurer que les modules globaux sont inclus dans votre chemin de recherche avec la commande suivante (sous Linux-ish)

export NODE_PATH=$(npm root --quiet -g)

57
Joel B

Installez n'importe quel paquet globalement comme ci-dessous:

$ npm install -g replace  // replace is one of the node module.

Comme ce module de remplacement est installé globalement, si vous voyez votre dossier de modules de nœuds, vous ne verrez pas remplacer le module là-bas et vous ne pourrez donc pas utiliser ce paquet avec require ('replace').

car avec require vous ne pouvez utiliser que les modules locaux présents dans votre dossier de modules de nœud.

Maintenant, pour utiliser le module global, vous devez le lier avec le chemin du module de noeud en utilisant la commande ci-dessous.

$ npm link replace

Maintenant, revenez en arrière et consultez le dossier de votre module de noeud. Vous pourrez maintenant y voir le module de remplacement et l’utiliser avec require ('replace') dans votre application, car il est lié à votre module de noeud local.

Veuillez me faire savoir si des éclaircissements supplémentaires sont nécessaires.

20
user5341372

Vous pouvez utiliser require avec le chemin d'accès au répertoire du module global en tant qu'argument.

require('/path/to/global/node_modules/the_module');

Sur mon mac, j'utilise ceci:

require('/usr/local/lib/node_modules/the_module');

Comment trouver où sont vos modules globaux? -> Où npm installe-t-il les packages?

11
ling

Définition de la variable d'environnement NODE_PATH pour qu'elle pointe vers votre dossier global node_modules.

Dans Windows 7 ou supérieur, le chemin d'accès ressemble à quelque chose comme %AppData%\npm\node_modules, Tandis que sous UNIX pourrait ressembler à quelque chose comme /home/sg/.npm_global/lib/node_modules/, Mais cela dépend de la configuration de l'utilisateur.

La commande npm config get prefix Pourrait vous aider à trouver le chemin correct.

Sous UNIX, vous pouvez le faire avec la commande suivante:

export NODE_PATH=`npm config get prefix`/lib/node_modules/
1
Ben Xu

J'utilise Docker. J'essaie de créer une image de menu fixe dans laquelle toutes mes dépendances de noeud sont installées, mais je peux utiliser mon répertoire d'application local lors de l'exécution du conteneur (sans le polluer avec un répertoire ou un lien node_modules). Cela provoque des problèmes dans ce scénario. Ma solution consiste à exiger du chemin exact où se trouve le module, par exemple. require ('/ usr/local/lib/node_modules/socket.io')

0
Darin London