NPMグローバルインストール「モジュールが見つかりません」


206

少し前に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 <bscarvell@gmail.com>",
  "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が空であることを私は知っています。これを解決する方法はわかりません。


-gオプションなしでインストールするとどうなりますか?
vinayr 2012

内部にwispがある現在のディレクトリにnode_modulesフォルダーをインストールします。
Menztrual 2012

知っている。それでもエラーが発生しますか?
vinayr 2012

うん。ローカルnpm i wispを実行した後にwispを実行しようとしても、同じエラーが返されます
Menztrual

モジュールをインストールしました。それは私にとってはうまくいきます。あなたのwispはどこですか?私の場合、./node_modules/wisp/wispうまく動いた。
vinayr 2012

回答:


370

これに遭遇している他の人にとって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 npm@1.1.45
npm info using node@v0.8.4
[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)

おそらく、を使用してソースからノードとnpmをインストールしましたconfigure --prefix=/opt。なぜこれがインストールされたモジュールを見つけることができなくなったのか、私にはわかりません。現時点での修正は、NODE_PATHが正しいディレクトリを指すようにすることです。

export NODE_PATH=/opt/lib/node_modules

私はrequire('promised-io/promise')今成功しました。


10
このNODE_PATHを設定する場所??
砂浜の

8
NODE_PATH環境変数を設定する@sandyは、オペレーティングシステムによって異なります。私はLinuxのフレーバーを使用export NODE_PATH=...しているので、それをローカルシェルで設定して、そのシェルで実行されるコマンドにエクスポートされるようにしていました。変更を永続的にするか、すべてのシェルで使用できるようにするには、それを.profileまたは同様のものに配置します。コンセプトは初心者にとっては煩わしいほど複雑です。help.ubuntu.com/community/EnvironmentVariablesを読んでみてください。Windowsの場合は、Linuxに切り替える必要があります。はい、冗談です。computerhope.com/issues/ch000549.htmまたはグーグルで試してください。
Neek

13
OSX Lionの場合、次のように動作しました... export NODE_PATH = / usr / local / lib / node_modules「locate node_modules」を使用して正しいパスを追跡しました。
k1eran 2013

2
NODE_PATHはWINDOWSでも機能します。これはノードに根ざし、モジュールはローカルにもグローバルにもインストールできます。
2014年

5
Mac OS XでHomebrewを使用してNode.jsをインストールした場合:open -a TextEdit ~/.bash_profileターミナルで実行しexport NODE_PATH=/usr/local/lib/node_modules、ファイルの最後に追加します。ターミナルウィンドウを再起動します。実行中echo $NODE_PATHは印刷されるはず/usr/local/lib/node_modulesです。
Pwdr

39

これをprog(mac)の先頭に追加します。

module.paths.push('/usr/local/lib/node_modules');


4
それを非OS固有の方法で行う方法はありますか?
UpTheCreek

@UpTheCreekこれ非OS固有の方法です。これはJSコードです。探しているモジュールを含むnode_modulesをポイントするだけです
Adelin

@Adelin-グローバルnode_modulesの場所はOS固有であるため、OS固有のソリューションです。たとえば、Windowsで開発していて、本番環境でLinuxを実行している場合、これは優れたソリューションではありません。
UpTheCreek

それは簡単に克服できます。たとえば、ノードパスを環境変数などに保存し、ハードコードされたパスをos.environ.nodepath(これらの行に沿ったもの)に置き換えることができます。
アデリン2018年

macOS Mojave 10.14.6では、エクスポートのNODE_PATH = / usr / local / lib / node_modules / npm / node_modulesを〜/ bash_profileに追加する必要があります。〜/ bash_profileは、ネイティブの.jsコードが影響を受けないため、マシンに依存しません。
vwvan

16

デフォルトでは、ノードはグローバルモジュールをロードするために/ usr / local / lib / node_moduleを調べません。で説明されているモジュールのロードを参照してくださいhttp://nodejs.org/api/modules.html#modules_loading_from_the_global_foldersで

したがって、1)/ usr / local / lib / node_moduleをNODE_PATHに追加してエクスポートするか、2)インストールされているノードモジュールを/ usr / local / lib / nodeにコピーする必要があります。(モジュールノードをロードするためのリンクで説明されているように、このパスを検索して機能します)


10

他の何もうまくいかない(私のような)一部の人は、これを試してください:

brew cleanup
brew link node
brew uninstall node
brew install node

それが誰かを助けることを願っています:)


9

次の一般的な修正は、どのモジュールにも当てはまります。たとえばrequest-promise

交換する

npm install request-promise --global

npm install request-promise --cli

働いた(ソース)そしてまたのためにglobalsinherits

また、環境変数を設定してみてください

NODE_PATH=%AppData%\npm\node_modules


3

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"

それはデフォルトでそこにあります。ユーザーの場合はロードされますが、rootとして実行されている間はロードされないため、rootユーザーのパスに含める必要があります。
スタムスター2017年

2

Windowsの場合、NodejsからWindowsにインストールされているモジュールが見つかりませんか?私のために働いたのは次のようにnpmリンクを実行していることです

npm link wisp

ただし、注意が必要です。これを行いましたが、圧縮されたコードをAWS Lambdaで使用できませんでした。npm install wisp --save(-gオプションなしで)node_moduleをローカルで作成する必要がありました
PM

2

Macユーザーの場合は、手動インストールを使用するのが最適です。

アクセス許可エラーの可能性を最小限に抑えるために、別のディレクトリを使用するようにnpmを構成できます。この例では、ホームフォルダーの隠しディレクトリになります。

  1. 開始する前にコンピューターをバックアップします。

  2. グローバルインストール用のディレクトリを作成します。

    mkdir〜/ .npm-global

  3. 新しいディレクトリパスを使用するようにnpmを構成します。

    npm config setプレフィックス '〜/ .npm-global'

  4. 〜/ .profileファイルを開くか作成して、次の行を追加します。

    エクスポートPATH =〜/ .npm-global / bin:$ PATH

  5. コマンドラインに戻り、システム変数を更新します。

    ソース〜/ .profile

  6. テスト:sudoを使用せずにパッケージをグローバルにダウンロードします。

    npm install -g jshint

手順2〜4の代わりに、対応するENV変数を使用できます(たとえば、〜/ .profileを変更したくない場合)。

NPM_CONFIG_PREFIX=~/.npm-global

リファレンス:https : //docs.npmjs.com/getting-started/fixing-npm-permissions


1

で実行さUbuntuれているテストサーバーの1つで同じ問題が発生しましたroot。次に使用して、新しいユーザーを作成useradd -m myuserし、すべてのインストールnvmnodeとして、パッケージ)myuser。今では問題なく動いています。


1

Windowsでは、クリーンインストールを実行しただけでこれが得られた場合、\ AppData \ Roamingのnpmキャッシュを一掃する必要があります。


1

私の場合には、両方のnodenpm同じパスに(いました/usr/bin)。NODE_PATH空だったので、npmにグローバルモジュールを置く/usr/lib/node_modules場所をrequire(...)成功裏にそれらを見つけます。唯一の例外はnpm、nodejsパッケージに付属するモジュールでした。私は64ビットシステムを使用しているため、に配置されました/usr/lib64/node_modules。これは、空NODE_PATHでノードがから開始された場合にrequire(...)が検索する場所ではありません/usr/bin。だから私は2つの選択肢がありました:

  • リンク /usr/lib64/node_modules/npm/usr/lib/node_modules/npm
  • からモジュールを移動/usr/lib/node_modules/*/usr/lib64/node_modules/て設定するNODE_PATH=/usr/lib64/node_modules

どちらもうまくいきました。OpenSUSE 42.1と更新リポジトリのnodejsパッケージを使用しています。バージョンは4.4.5です。


1

私はこれを簡単な方法で行いました...

  1. コントロールパネルからのノードのアンインストール[Windows 7]
  2. ノードを再インストール
  3. 分度器npm install --global --verbose protractor
    更新Webドライバーマネージャーをインストールします 。

私にとってはうまくいきます。

これがあなたに役立つことを願っています...


1

このエラーが発生しました Error: Cannot find module 'number-is-nan'モジュールが実際に存在するしました。これは、Node.jsのインストールが不良/不完全であったことが原因です。

Windowsの場合、他の回答が示唆しているように、ノードのクリーンインストールが必要です

  • Node.jsをアンインストールします。
  • 2つのフォルダnpmを削除し、npm_cache中をC:\Users\user\AppData\Roaming
  • Windowsを再起動してNode.jsをインストールします。
  • 実行npm init(またはnpm init --yesのためのデフォルトの設定
  • のWindows環境変数を設定しますNODE_PATH。このパスは、パッケージがインストールされる場所です。それはおそらく次のようなものですNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • 新しいcmdコンソールを起動し、npm正常に動作するはずです

注意 :

Node.jsを再インストールする前に最後のポイントを試してください。時間を節約でき、すべてのパッケージの再インストールを回避できます。


1

私はこのaxiosモジュールのこの問題にちょうど会いました。それから私はこれを試しました:実行rm -rf node_modulesしてyarn。そしてそれは機能します。


0

OPと同じエラーがありましたが、表示されたログを掘り下げました sh: node: command not found

/ usr / bin / nodeプログラム(シンボリックリンク)がとともにインストールされなくなったことが判明しましたapt install nodejs。シンボリック/usr/bin/node' toリンクされたnodejs, npm install -g @ angular / cli`が成功したら、

これをdebianにインストールする適切な方法はapt install nodejs-legacyです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.