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.
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
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')
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)
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.
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?
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/
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')