2010-11-14 42 views
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文件。

回答

3
  1. Node.js的查找相對於腳本位置requirable文件,所以你應該使用

    報童=需要( '../的lib /報童');

    in srv/mail.js。據我所知,你必須使用--deg選項來配置node.js,然後讓它使用任何調試功能。

2

這是不工作的原因是因爲節點。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目錄,將不包括該文件,因爲它不知道是什麼它被稱爲或它應該位於何處。

+0

這是常見的JavaScript模塊系統的一個很大的描述。但它並沒有回答實際的問題:爲什麼NODE_DEBUG不能像記錄那樣工作? – 2010-11-25 05:04:04

+0

我認爲Sannis爲什麼NODE_DEBUG不起作用的答案是正確的,但是覺得問題的實際內容還沒有完全回答他。 – 2010-11-26 11:29:23

10

你要導出NODE_DEBUG=module,不=1