node.js: почему NODE_DEBUG = 1 не работает? (пытается отладить ошибку require ()) - PullRequest
1 голос
/ 14 ноября 2010

У меня есть такая структура каталогов:

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

Я запускаю main.js из каталога проекта:

$ node srv/main.js

В main.js я могу сделать:

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

Однако, это терпит неудачу:

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

Аналогично, если я запускаю интерактивный узел в каталоге "project", мне может потребоваться paperboy, но не Redis-клиент.Я получаю сообщение об ошибке:

> 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)
...

Глядя на источник для resolModuleFilename (), он пытается напечатать строку отладки, которую я не вижу:

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

У меня естьпопытался включить это с помощью экспорта NODE_DEBUG = 1, но я все еще не вижу эту отладочную печать, когда пытаюсь потребовать.

Что я делаю неправильно, пытаясь заставить эту отладку печатать?И, во-вторых, с какой стати разносчик бумаги загружается нормально, но Redis-клиент не может быть найден?

Дополнительная информация: Вот полный список файлов / каталогов в каталоге "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

Каталоги lib - это распакованные файлы .tar.gz из github, переименованные в соответствии с именем модуля из файлов package.json.

Ответы [ 3 ]

10 голосов
/ 23 февраля 2012

Вы хотите экспортировать NODE_DEBUG=module, а не =1

3 голосов
/ 15 ноября 2010
  1. Node.js ищет необходимые файлы относительно местоположения скрипта, поэтому вы должны использовать

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

    в srv / mail.js.

  2. Вы должны сконфигурировать файл node.js с параметром --debug и затем использовать его для использования любых функций отладки, как я знаю.

2 голосов
/ 24 ноября 2010

Причина, по которой это не работает, заключается в том, что Node.js автоматически включает скрипт, если он имеет имя index.js

Узел Cookie и Paperboy выглядят так:

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

Redis Client выглядит так:

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

Вам необходимо изменить требование:

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

По сути, узел ищет требуемые файлы примерно так:

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

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

Поскольку файла index.js нет, узел не может продолжить поиск в каталоге lib ./lib/redis-client/ и не будет включать файл, так как не знает, как он называется и где он должен быть расположен.

...