2011-03-13 3 views
15

J'utilise Node Boilerplate et tout a bien fonctionné jusqu'à ce que je décide de créer un autre projet dessus (dans un autre répertoire).Node.js - module introuvable

Maintenant, j'ai exactement la même base de code (ce projet AS IS) dans deux dossiers différents. Je peux courir l'un des sans aucun problème, mais un autre échoue avec:

% node app.js 
node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Cannot find module 'connect/middleware/router' 
    at Function._resolveFilename (module.js:299:11) 
    at Function._load (module.js:245:25) 
    at require (module.js:327:19) 
    at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/server.js:17:14) 
    at Module._compile (module.js:383:26) 
    at Object..js (module.js:389:10) 
    at Module.load (module.js:315:31) 
    at Function._load (module.js:276:12) 
    at require (module.js:327:19) 
    at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/index.js:28:31) 

Il y a un problème similaire expliqué ici - https://github.com/visionmedia/express/issues/535 qui dit que le problème est dans la version incompatible de connexion/express.

Mais comment est-ce possible? Le code source est exactement le même dans deux dossiers et il fonctionne bien dans une copie et échoue dans un autre?

Répondre

7

OK, laissez-moi répondre à ma propre question:

Désolé pour la désinformation - même les deux dossiers ne sont pas exactement (je vais avoir besoin d'apprendre plus diff unix). Et là, il faut ("connect") dans le code

La commande locale de connexion dans le dossier/lib a priorité, mais si ce n'est pas le cas, la connexion sera chargée à partir des modules ~/.node_comme Ricardo précédemment défini.

8

Les deux dossiers partagent-ils un parent commun? Node recherche les modules dans ~/.node_modules et/node_modules dans le répertoire de votre application.

5

@see node.js express module not loading properly dans le dernier commentaire, peut-être il aide

l'idée de base est d'installer le module dans votre dossier d'application, et non au niveau du système

+0

Cela fonctionne pour moi, mais je Je suis confus quant à savoir pourquoi l'installation du niveau système avec '-g' ne trouve pas le module dans le fichier js en cours d'exécution. – Adam