2011-11-14 3 views
2

Dans un cas qui ressemble à this problem, J'ai installé un module avec npm, mais require('module') ne peut pas le trouver.Dans un nœud, pourquoi require() ne parvient pas à trouver un module que je viens d'installer avec npm?

my-machine:projectname me$ npm install express-csrf 
npm info it worked if it ends with ok 
npm info version 0.2.1 
npm info install [email protected] 
npm info activate [email protected] 
npm info build Success: [email protected] 
npm ok 

Jusqu'ici, tout va bien. Mais ...

my-machine:projectname me$ node 
> require('express-csrf') 
Error: Cannot find module 'express-csrf' 
at Function._resolveFilename (module.js:317:11) 
at Function._load (module.js:262:25) 
at require (module.js:346:19) 
at [object Context]:1:1 
at Interface.<anonymous> (repl.js:171:22) 
at Interface.emit (events.js:64:17) 
at Interface._onLine (readline.js:153:10) 
at Interface._line (readline.js:408:8) 
at Interface._ttyWrite (readline.js:585:14) 
at ReadStream.<anonymous> (readline.js:73:12) 

NPM dit le paquet est là:

my-machine:projectname me$ npm ls express-csrf 
npm info it worked if it ends with ok 
npm info version 0.2.1 
[email protected]    active installed 
npm ok 

Notez que le nouveau module ne figure pas dans le répertoire/usr/local/lib/nœud, mais il apparaissent sous /usr/local/lib/node/.npm

my-machine:projectname me$ ls /usr/local/lib/node/express-csrf* 
ls: /usr/local/lib/node/express-csrf*: No such file or directory 
my-machine:projectname me$ ls /usr/local/lib/node/.npm/express-csrf* 
0.3.3 active 

Mise à jour: Je dois dire que tout fonctionne quand je Qualifiez entièrement le chemin dans les états require comme ceci:

require('/usr/local/lib/node/.npm/express-csrf/active/package/index.js') 
+0

Où sont les autres modules que vous peut exiger? Peut-être que le chemin est légèrement différent en raison d'une inadéquation de l'environnement? – Thilo

+0

npm est à la version 1.0.103, le vôtre est un peu démodé ... –

+0

http://stackoverflow.com/questions/15471965/what-will-be-the-difference-in-requiremypackage-js-and- requireemypackage/15471995 # 15471995 –

Répondre

2

Mettre à niveau npm.

Votre problème est que require() ne recherche pas dans le dossier .npm.

Vous pouvez résoudre ce problème en mettant à niveau npm afin qu'il place les fichiers dans les bons endroits. Vous pouvez également installer vos modules manuellement dans un dossier à la racine de votre projet et require (« mymodule ../ »)

+0

Merci, Chris. Je vais mettre à niveau, et si cela ne fonctionne pas, je vais essayer d'installer manuellement ce module problématique. –

0

Si vous êtes sur Windows, utilisez:

export NODE_PATH="C:\Users\IMarek\AppData\Roaming\npm\node_modules"
+4

Pourriez-vous publier la partie révélatrice de votre message de blog dans la réponse? Au lieu d'afficher un lien sur quelques réponses. – j0k

Questions connexes