J'essaie de configurer Node sur Mac OSX Lion. Tout semble fonctionner correctement, mais je n'arrive pas à importer quoi que ce soit des modules de mon dossier de modules globaux. J'obtiens l'erreur,
Error: Cannot find module <module>
Si j'exécute ceci node -e require.paths
:, la réponse que j'obtiens est:
[ '/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 d'exécuter un script, j'obtiens 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 pas importer de bibliothèques.
npm link
) peut être trouvée ici: stackoverflow.com/a/15646750/2671392Réponses:
Si vous utilisez npm> = 1.0, vous pouvez utiliser
npm link <global-package>
pour créer un lien local vers un package déjà installé globalement. ( Mise en garde: le système d'exploitation doit prendre en charge les liens symboliques. )Cependant, cela ne va pas sans problèmes.
Vous pouvez également installer les packages localement et globalement.
Pour plus d'informations, consultez
la source
npm
le cache de (qui habite~/.npm
) facilitera le processus de réinstallation effectué dans vos différents emplacements.Node.js utilise la variable d'environnement
NODE_PATH
pour permettre de spécifier des répertoires supplémentaires à inclure dans le chemin de recherche du module. Vous pouvez utilisernpm
lui-même pour vous dire où les modules globaux sont stockés avec lanpm root -g
commande. Donc, en mettant ces deux ensemble, 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)
la source
NODE_PATH
indice de variable d'environnement. Cela a beaucoup aidé!NODE_PATH
le chemin posix équivalent pour que npm fonctionne sur MSYS2. Je vous remercie..node_modules
dossier consultable, mais pour importer des modules à l'aide derequire()
, ils doivent toujours être installés dans votre répertoire de projet local (ou, alternativement, liés à l'aide denpm link
). Les modules globaux ne peuvent pas être importés dans les projets, seuls les binaires / scripts peuvent être exécutés à partir de là.Vous pouvez utiliser le lien npm pour créer un lien symbolique vers votre package global dans votre dossier projets.
Exemple:
Il ne fait que créer un dossier node_modules local, puis créer un lien symbolique express -> [répertoire global] / node_modules / express qui peut ensuite être résolu par
require('express')
la source
Installez n'importe quel package dans le monde comme ci-dessous:
Comme ce module de remplacement est installé globalement, si vous voyez votre dossier de modules de nœud, vous ne verrez pas de module de remplacement à cet endroit et vous ne pouvez donc pas utiliser ce package en utilisant require ('replace').
car avec require, vous ne pouvez utiliser que des modules locaux qui sont présents dans votre dossier de module de nœud.
Maintenant, pour utiliser le module global, vous devez le lier au chemin du module de nœud en utilisant la commande ci-dessous.
Maintenant, revenez en arrière et voyez votre dossier de module de nœud, vous pouvez maintenant y voir le module de remplacement et l'utiliser avec require ('replace') dans votre application car il est lié à votre module de nœud local.
Veuillez me faire savoir si des éclaircissements supplémentaires sont nécessaires.
la source
Vous pouvez utiliser require avec le chemin d'accès au répertoire global du module comme argument.
Sur mon mac, j'utilise ceci:
Comment trouver où se trouvent vos modules globaux? -> Où npm installe-t-il les packages?
la source
Définition de la variable d'environnement NODE_PATH pour qu'elle pointe vers votre
node_modules
dossier global .Dans Windows 7 ou supérieur, le chemin est quelque chose comme
%AppData%\npm\node_modules
tandis que dans UNIX pourrait être 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
peut aider à découvrir quel est le chemin correct.Dans les systèmes UNIX, vous pouvez l'accomplir avec la commande suivante:
la source
J'utilise Docker. J'essaie de créer une image docker sur laquelle toutes mes dépendances de nœud sont installées, mais je peux utiliser mon répertoire d'application local au moment 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 de contournement est d'exiger du chemin exact où le module, par exemple require ('/ usr / local / lib / node_modules / socket.io')
la source
require.paths
est obsolète.Accédez au dossier de votre projet et tapez
qui devrait l'installer dans le dossier local ./node_modules où node le recherchera.
Je garde mes affaires comme ça:
Créer un fichier app.js
maintenant lance mon application
Assurez-vous que vous utilisez
npm >= 1.0
etnode >= 4.0
.la source