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

export 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ファイルのモジュール名と一致するように名前が変更されています。

4

3 に答える 3

10

エクスポートするNODE_DEBUG=moduleのではなく、エクスポートする=1

于 2012-02-23T12:30:00.067 に答える
3
  1. Node.jsは、スクリプトの場所に関連して必要なファイルを探すため、次を使用する必要があります。

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

    srv/mail.jsにあります。

  2. 私が知っているように、-debugオプションを指定してnode.jsを構成してから、デバッグ機能を使用できるようにする必要があります。

于 2010-11-14T22:09:01.877 に答える
2

これが機能しない理由は、Node.jsに名前が付いている場合、スクリプトが自動的に含まれるためです。index.js

NodeCookieと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');

基本的に、ノードは次のような必須ファイルを探します。

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ディレクトリを検索し続けることができず、ファイルの名前や場所がわからないため、ファイルは含まれません。

于 2010-11-24T10:29:58.217 に答える