1. ホーム
  2. ウィンドウズ

[解決済み】WindowsでNodejsがインストールされたモジュールを見つけることができません。

2022-04-19 18:45:10

質問

現在、Windowsでnodejsを学習しています。いくつかのモジュールはnpm.cmdでグローバルにインストールされていますが、nodejsはインストールされたモジュールを見つけることに失敗しました。たとえば、jadeです。

npm install jade -g

Jadeは、以下のディレクトリにインストールされます。 "C:\Program Files (x86)\nodejs\node_modules" が、以下のコードでは "Cannot find module 'jade'" のエラーが発生します。

var jade = require('jade');

しかし、jadeがローカルにインストールされている場合(npmの-gオプションなし)には、コードは正常に実行されます。私はローカルにインストールされたモジュールを使いたくありません、それは私にとってディスクスペースの浪費です。どうすれば、グローバルにインストールされたモジュールをWindowsで動作させることができるのでしょうか?

解決方法は?

という環境変数を追加します。 NODE_PATH に設定し、それを %USERPROFILE%\Application Data\npm\node_modules (Windows XP)の場合。 %AppData%\npm\node_modules (Windows 7/8/10)、またはあなたのWindowsフレーバーでnpmがモジュールをインストールすることになる場所です。これを最後に行うには、システムのプロパティダイアログの詳細設定タブで、システム変数としてこれを追加します (run control.exe sysdm.cpl,System,3 ).

Windows 7+ での迅速な解決策は、ただ実行することです。

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

特筆すべきは NODE_PATH はNodeアプリでモジュールをインポートするときのみ使用されます。グローバルにインストールされたモジュールのバイナリを CLI で使用したい場合は、このバイナリも PATH ただし node_modules の部分(例えば %AppData%\npm Windows 7/8/10 の場合)。


昔話

私はnode.jsの初心者なので、完全に正しくないかもしれませんが、私の経験では、このように動作します。

  1. -g は、グローバルなライブラリをインストールする方法ではなく、システムパス上に配置することで、フルパスを記述せずにコマンドラインから呼び出すことができるようにするための方法です。例えば、nodeアプリが以下のようなローカルファイルを変換している場合に便利です。 以下 - をグローバルにインストールすれば、どのディレクトリでも使えるようになります。
  2. node.js自体はnpmのグローバルディレクトリを見ず、別のアルゴリズムで必要なファイルを探しています。 http://nodejs.org/api/modules.html#modules_file_modules (基本的に、パス内のすべてのフォルダーをスキャンし、現在の ノードモジュール フォルダをチェックします)。

詳しくは類似の質問を参照してください。 npmを使用してモジュールをグローバルにインストールするにはどうすればよいですか?