node.js:为什么NODE_DEBUG = 1不起作用? (尝试调试需要()错误)
问题描述:
我有一个目录结构如下所示:node.js:为什么NODE_DEBUG = 1不起作用? (尝试调试需要()错误)
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');
同样,如果我在“项目”目录中启动交互式节点,我可以要求paperboy,但不要redis-client。我得到的错误是:
> 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)
...
纵观源resolveModuleFilename(),它试图打印调试字符串,我没有看到:
debug("looking for " + JSON.stringify(id) + " in " + JSON.stringify(paths));
我试图通过启用此导出NODE_DEBUG = 1,但在尝试请求时仍然看不到此调试打印。
我在做什么错在试图让这个调试打印? 其次,为什么paperboy会加载正常,但redis-client无法找到?
附加信息:这是在“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目录是从GitHub解包名为.tar.gz文件,重新命名的模块名称从匹配package.json文件。
答
-
Node.js的查找相对于脚本位置requirable文件,所以你应该使用
报童=需要( '../的lib /报童');
in srv/mail.js。据我所知,你必须使用--deg选项来配置node.js,然后让它使用任何调试功能。
答
这是不工作的原因是因为节点。JS将自动包含一个脚本,如果它有名字index.js
节点Cookie和报童是这样的:
lib/cookie-node/index.js
lib/paperboy/index.js
Redis的客户是这样的:
lib/redis-client/lib/redis-client.js
你需要改变你的要求到:
var redis = require('./lib/redis-client/lib/redis-client');
本质上,节点查找require文件像这样:
var redis = require('./lib/redis-client');
./lib/redis-client.js
./lib/redis-client/index.js // (if redis-client is a directory).
由于没有index.js
文件,节点是无法进行寻找在./lib/redis-client/ lib目录,将不包括该文件,因为它不知道是什么它被称为或它应该位于何处。
答
你要导出NODE_DEBUG=module
,不=1
这是常见的JavaScript模块系统的一个很大的描述。但它并没有回答实际的问题:为什么NODE_DEBUG不能像记录那样工作? – 2010-11-25 05:04:04
我认为Sannis为什么NODE_DEBUG不起作用的答案是正确的,但是觉得问题的实际内容还没有完全回答他。 – 2010-11-26 11:29:23