2010-11-14 50 views
1

J'ai une structure de répertoire comme ceci:node.js: Pourquoi NODE_DEBUG = 1 ne fonctionne-t-il pas? (En essayant de déboguer un require() erreur)

project 
    lib 
    paperboy 
    redis-client 
    node-cookie 
    srv 
    main.js 
    ... 

Je commence main.js à partir du répertoire du projet:

$ node srv/main.js 

En main.js, je peut faire:

paperboy = require('./lib/paperboy'); 

Cependant, cela ne fonctionne pas:

redis = require('./lib/redis-client'); 

De même, si je démarre un nœud interactif dans le répertoire "projet", je peux demander paperboy, mais pas redis-client. L'erreur que je reçois est:

> require('./lib/redis-client') 
Error: Cannot find module './lib/redis-client' 
    at resolveModuleFilename (node.js:265:13) 
    at loadModule (node.js:231:20) 
    at require (node.js:291:14) 
... 

regardant la source resolveModuleFilename(), il tente d'imprimer une chaîne de débogage, que je ne vois pas:

debug("looking for " + JSON.stringify(id) + " in " + JSON.stringify(paths)); 

J'ai essayé d'activer cette grâce Exporter NODE_DEBUG = 1, mais je ne vois toujours pas cette impression de débogage lorsque vous essayez d'exiger. Qu'est-ce que je fais de mal à essayer d'obtenir ce débogage pour imprimer?

Et, deuxièmement, pourquoi paperboy charge bien, mais redis-client ne peut pas être trouvé?

Informations complémentaires: Voici le dossier complet/liste de répertoire dans le répertoire « lib »:

lib 
lib/cookie-node 
lib/cookie-node/package.json 
lib/cookie-node/LICENSE.txt 
lib/cookie-node/README.markdown 
lib/cookie-node/example 
lib/cookie-node/example/ex1.js 
lib/cookie-node/index.js 
lib/redis-client 
lib/redis-client/package.json 
lib/redis-client/TODO.md 
lib/redis-client/examples 
lib/redis-client/examples/redis-version.js 
lib/redis-client/examples/using-kiwi.js 
lib/redis-client/examples/subscriber.js 
lib/redis-client/examples/publisher.js 
lib/redis-client/examples/.redis-version.js.swp 
lib/redis-client/examples/README.md 
lib/redis-client/seed.yml 
lib/redis-client/LICENSE 
lib/redis-client/test 
lib/redis-client/test/test_throw_from_callback.js 
lib/redis-client/test/test_shutdown_reconnect.js 
lib/redis-client/test/test.js 
lib/redis-client/test/sample.png 
lib/redis-client/.gitignore 
lib/redis-client/lib 
lib/redis-client/lib/redis-client.js 
lib/redis-client/README.md 
lib/paperboy 
lib/paperboy/package.json 
lib/paperboy/seed.yml 
lib/paperboy/LICENSE.txt 
lib/paperboy/example 
lib/paperboy/example/basic.js 
lib/paperboy/example/webroot 
lib/paperboy/example/webroot/img 
lib/paperboy/example/webroot/img/paperboy.jpg 
lib/paperboy/example/webroot/index.html 
lib/paperboy/index.js 
lib/paperboy/lib 
lib/paperboy/lib/paperboy.js 
lib/paperboy/README.md 

Les lib sont .tar.gz non emballés de GitHub, re-nommé pour correspondre au nom du module de les fichiers package.json.

Répondre

3
  1. Node.js recherche les fichiers requirable par rapport à l'emplacement du script, vous devez donc utiliser

    Paperboy = require ('../ lib/Paperboy');

    dans srv/mail.js.

  2. Vous devez configurer node.js avec l'option --debug, puis utiliser les fonctions de débogage, comme je le sais.

2

La raison pour laquelle cela ne fonctionne pas est parce que le noeud.js comprendront automatiquement un script si elle a le nom index.js

Noeud Cookie et Paperboy ressemblent à ceci:

lib/cookie-node/index.js 
lib/paperboy/index.js 

Redis client ressemble à ceci:

lib/redis-client/lib/redis-client.js 

Vous devez changer votre besoin à:

var redis = require('./lib/redis-client/lib/redis-client'); 

Essentiellement, le nœud recherche les fichiers requis comme ceci:

var redis = require('./lib/redis-client'); 

    ./lib/redis-client.js 
    ./lib/redis-client/index.js // (if redis-client is a directory). 

Comme il n'y a pas de fichier index.js, noeud ne parvient pas à poursuivre la recherche dans le répertoire lib de ./lib/redis-client/ et ne comprendra pas le fichier, car il ne sait pas quoi il est appelé ou où il devrait être situé.

+0

Ceci est une excellente description du système de module JavaScript commun. Mais cela ne répond pas à la vraie question: pourquoi NODE_DEBUG ne fonctionne-t-il pas comme documenté? –

+0

J'ai supposé que la réponse de Sannis pour expliquer pourquoi NODE_DEBUG ne fonctionnait pas était la bonne, mais il a estimé que le contenu réel de la question n'avait pas été entièrement répondu par lui. –

10

Vous voulez exporter NODE_DEBUG=module, pas =1