1. ホーム
  2. node.js

[解決済み】NPMグローバルインストール "cannot find module"

2022-04-17 12:06:50

質問

モジュールを書き、先ほど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の部分が実行ファイルをbinに追加して、そのディレクトリのnode_modulesが空であることと関係しているのは分かっています。これを解決する方法はわかりません。

解決方法は?

この問題に遭遇した人のために、私の場合は 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') が成功しました。