先ほど npm に公開したモジュールを作成しました (https://npmjs.org/package/wisp)
したがって、コマンドラインから正常にインストールされます。
$ npm i -g wisp
しかし、コマンドラインから実行すると、optimist がインストールされていないというエラーが繰り返し表示されます。
$ wisp
Error: Cannot find module 'optimist'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
at Module._compile (module.js:449:26)
at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)
ただし、依存関係として package.json に指定しました:
{
"name": "wisp",
"author": "Brendan Scarvell <[email protected]>",
"version": "0.1.0",
"description": "Global nodejs file server",
"dependencies": {
"optimist": "~0.3.4"
},
"repository": "git://github.com/tehlulz/wisp",
"bin": {
"wisp" : "./wisp"
}
}
これを実行するにはどうすればいいか知っている人はいませんか? bin 部分に実行可能ファイルを追加し、そのディレクトリ内の node_modules が空になっていることが関係していることはわかっています。これを解決する方法がわかりません。
ベストアンサー1
npm
これに遭遇した他の人のために、私の場合は、 以外の場所にインストールしたためにこの問題が発生しましたNODE_PATH
。
[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH
私の NODE_PATH は空でしたが、実行すると次npm install --global --verbose promised-io
の場所にインストールされることが示されました/opt/lib/node_modules/promised-io
:
[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli '/opt/bin/npm',
npm verb cli 'install',
npm verb cli '--global',
npm verb cli '--verbose',
npm verb cli 'promised-io' ]
npm info using [email protected]
npm info using [email protected]
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]
私のスクリプトは次の場合に失敗しますrequire('promised-io/promise')
:
[neek@uberneek project]$ node buildscripts/stringsmerge.js
module.js:340
throw err;
^
Error: Cannot find module 'promised-io/promise'
at Function.Module._resolveFilename (module.js:338:15)
おそらく、 を使ってソースから node と npm をインストールしたのでしょうconfigure --prefix=/opt
。なぜインストールされたモジュールを見つけられなくなったのかはわかりません。現時点での修正方法は、NODE_PATH を正しいディレクトリに向けることです。
export NODE_PATH=/opt/lib/node_modules
私のrequire('promised-io/promise')
今が成功です。