我有一个像这样的目录结构:
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-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启用此功能,但在尝试要求时仍然没有看到此调试打印。
在尝试打印此调试时,我做错了什么? 第二,为什么报童会加载很好,但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文件中的模块名。
答案 0 :(得分:10)
您想要导出NODE_DEBUG=module
,而不是=1
答案 1 :(得分:3)
Node.js查找相对于脚本位置的必需文件,因此您应该使用
paperboy = require('../ lib / paperboy');
在srv / mail.js。
你必须使用--debug选项配置node.js,然后让它使用任何调试功能,正如我所知。
答案 2 :(得分:2)
这不起作用的原因是因为Node.js会自动包含一个名称为index.js
的脚本
Node Cookie和Paperboy看起来像这样:
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');
实际上,node会查找需要的文件,如下所示:
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目录,并且不会包含该文件,因为它不知道它的名称是什么或者它应该位于何处。