2

/tmp/test.jsこれを含む名前の小さなノード スクリプトがあります。

console.log(require("w3cjs"));

コマンドプロンプトからこれを行う場合:

nvm use v0.10.21
node /tmp/test.js

私はこの出力を得る:

module.js:340
    throw err;
      ^
Error: Cannot find module 'w3cjs'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/tmp/test.js:1:75)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

しかし、私がこれを行うと:

node -e $(cat /tmp/test.js)

私はこの出力を得る:

{ validate: [Function: validate],
  setW3cCheckUrl: [Function: setW3cCheckUrl],
  w3cjs: [Circular] }

(つまり、動作します。)

違いの理由と、スクリプトを機能させるにはどうすればよいですか?

4

1 に答える 1

9

別のディレクトリでスクリプトを実行すると、Nodenode_modulesはそのスクリプトのディレクトリのフォルダでローカル モジュールを探します。

シェルの作業ディレクトリが現在/projects/foo. を実行するnode /tmp/test.jsと、Node は/tmp/node_modulesではなく でモジュールを探します/projects/foo/node_modules

ただし、スクリプト ファイルを実行せずに、コマンド ラインでテキストを実行すると-e、Node はシェルの現在の作業ディレクトリ、つまり/projects/foo/node_modules.

w3cjs作業ディレクトリにインストールしたようですが、 /tmp. そこにインストールするか、オプションを使用してモジュールをグローバルにインストールnpm-gする必要があります。

于 2013-11-01T14:32:27.127 に答える