Node.jsを使用して「モジュールが見つかりません」エラーを解決するにはどうすればよいですか?


616

GitHubからモジュールをプルダウンし、指示に従ってビルドした後、次を使用して既存のプロジェクトにプルします。

> npm install ../faye

これはトリックを行うように見えます:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

しかし、Node.jsはモジュールを見つけることができません。

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

私は本当にここで何が起こっているのかを理解したいのですが、次にどこを見ればいいのか少し迷っています。助言がありますか?


8
node_modulesディレクトリはalongisde、プロジェクトのルートになると予想されapp.js、あなたのケースで。なぜ..npmインストールパスを使用したのですか?
— アレックスウェイン

1
「npm install ../faye」を「npm install ../faye/bu​​ild」に変更すると、期待どおりに動作します。これがどれほど典型的かはわかりませんが、fayeはビルド時にビルドディレクトリを作成し、そこにpackage.jsonのコピーを置きます。npmは、ルートレベルのpackage.jsonについて不満はありませんが、そのレベルに存在しないファイルを参照します。
— Dave Causey

2
私は問題を解決しましたが、実際の質問(この問題のトラブルシューティング方法)に対する解決策は本当にありませんでした。初心者がこの状況を回避しやすくするために、npmやノードを改善するためのいくつかの提案を考えてみます。
— Dave Causey

1
この経るリンク、あなたは場所を正確にのようないくつかのアイデアを得ることができ、そのあなたのモジュールを検索することができない...
— て、Amol M Kulkarniさん

1
あなたがそれをインストールしたのと同じフォルダにいる天気を確認してください?グローバルにインストールしなかった場合。
— Ashwani Panwar

回答:


513

を使用npm installすると、モジュールが現在のディレクトリ(と呼ばれるサブディレクトリnode_modules)にのみインストールされます。app.jsは以下にありhome/dave/src/server/ますか?そうでなく、任意のディレクトリからモジュールを使用したい場合は、を使用してグローバルにインストールする必要がありますnpm install -g。

私は通常、ほとんどのパッケージをローカルにインストールして、プロジェクトコードと共にチェックインできるようにします。

アップデート(8/2019):

現在、npmがnode_modulesディレクトリを変更すると自動的に生成されるpackage-lock.jsonファイルを使用できます。したがってpackage-lock.json、は現在使用しているnode_modulesの正確なバージョンを追跡するため、パッケージのチェックインを省略できます。コマンドpackage-lock.jsonをpackage.json使用する代わりにからパッケージをインストールするにはnpm ci。

アップデート(2016年3月):

特に私のコードが依存するパッケージをチェックインするという返答について、多くのクレームを受け取りました。数日前に、誰かがすべてのパッケージ(https://kodfabrik.com/journal/i-ve-just-liberated-my-modules)を非公開にしました。これにより、React、Babel、およびその他すべてが破壊されました。うまくいけば、本番用のコードがある場合、NPMが実際に依存関係を維持していることに依存できないことは明らかです。


264
「たいていのパッケージはローカルにインストールするので、プロジェクトコードと共にチェックインできます。」通常、package.json依存するnpmモジュールのリストを作成し、node_modulesフォルダーを無視することをお勧めします。次にnpm install、リポジトリのクローンを作成した後で設定を行います。
— アレックスウェイン

53
package.json依存関係をリストすることに加えて、私は依存しているものの既知の適切なコピーを保持したいと思っています。ディスク容量は安く、npmまたはパッケージがnpmから消えても、リポジトリには完全に機能するプロジェクトがあります。
— Bill

165
古い開発者として、「ディスクスペースが安い」というNode devの「パラダイム」を読んだとき、私はほとんど窒息しました。使用しているライブラリがあります。私が100コピー(またはもっと悪いことに、NEARコピー)を持っているかもしれないという考えは、私の胃を一変させます。ディスク容量は安価ですが、メンテナンスに時間がかかります。たぶん、1回限りのおもちゃプロジェクトをしている場合、メンテナンスは安価です。ただし、実際の作業では、メンテナンスは高価であり、ディスク領域のコストには影響しません。
— ロイドサージェント

66
この最後のコメントは本当にわかりません。コードが100コピーあると言っているのではなく、プロジェクトが依存しているコードを1コピー持っているだけです。代替策は、NPMまたは依存関係が1日消えた場合に機能しないプロジェクトを作成することです。依存関係をゼロから書き直すのもかなり費用がかかると思います。余談ですが、私は10年間マイクロソフトに勤務しており、ソースツリーにサードパーティの依存関係が常にチェックされていました。
— Bill

33
@LloydSargentは「NEARコピー」を持つことではありません、それはだ、悪いことより良い各プロジェクトは、あなたが定義したので、具体的な依存性を持っており、あなたのコードの残りの部分が依存しているので、。あなたが持っていた場合は、同じ複数のプロジェクト間でのバージョンを使用すると、更新した場合、次に何をあなたはしなければならない更新のすべてを。依存関係を固定すると、段階的なアップグレードが可能になり、メンテナンスが大幅に削減されます。実際の仕事、おもちゃ以外のプロジェクト。
— デイブニュートン

459

非常によく似た問題がありました。node_modulesフォルダ全体を削除して再インストールするとうまくいきました:

rm -rf node_modules
npm install

13
安全のため、npmキャッシュクリーンも行います:)
— Tony Tai Nguyen

1
おそらく、奇妙な依存関係の問題が発生した場合、npm installまたはnpm update解決しない場合は、最初のトラブルシューティングの手順として適切です。これによりError: Cannot find module 'http-errors'、Expressアプリを実行しようとするとランダムに表示される問題が解決しました。
— Matt Vukas

驚くべきことに、@ carelesslyChoosyの答えは、欠けている依存関係を解決しました。npm installを使用してアップグレードおよびダウングレードしても、整頓されていないようです。
— eel ghEEz 2017

3
ここで欠落しているステップは、を実行する前にpackage-lock.jsonファイルを削除することnpm installです。
— リッククアンツ2018年

これは私にとってはうまくいきませんでした、コンピュータを再起動しても;)
— Jason G

83
npm install --save module_name

たとえば、エラーが次の場合:

{[エラー:モジュール '/root/.npm/form-data'が見つかりません]コード: 'MODULE_NOT_FOUND'}

次に、コマンドを実行してこの問題を解決できますnpm install --save form-data。


1
それをグローバルにインストールしたとき、npm / node-modulesフォルダーが空で、ng new project-nameいくつかのモジュールが見つからないことを示して使用していたようです...指定されたコマンドを使用してそれぞれをインストールする必要がありました。それらすべてを一度にインストールする単一のコマンドはありますか?
— Vishal Nair 2016年

25

TypeScriptユーザーの場合、組み込みNodeモジュール(など)をインポートする場合 http、pathなどurl)をていて、次のような"Cannot find module "x"エラーが発生している場合は、実行してエラーを修正できます。

npm install @types/node --save-dev

このコマンドは、NodeJS TypeScript定義をプロジェクトにインポートし、Nodeの組み込みモジュールを使用できるようにします。


18

これは最初のnpmインストールが何らかの理由(npmのSIGINT)でクラッシュした場合、または遅延が長すぎるか、データが破損している場合に発生します。npmインストールを再試行しても、問題は保存されません。

npmの最初のチェックで問題が発生したため、ファイルを削除してnpmのインストールを再開することをお勧めします。


16
これは私にとって問題を診断しました。私は結局npm cache clearnode_modulesを実行してクリアし、その後npm install私の問題を修正しました。
— メクラリアン

9

nvmを使用する場合は、他のライブラリにバインドされている既存のnode_modulesが正しいNode.jsバージョン用にコンパイルされていることを確認してください。

私は同じエラーを抱えていました。その理由は次のとおりです。サーバー上で2つのアプリを実行しているため、nvmを使用します。1つはnode-gd(現時点ではNode.js 6では実行されません)を使用するため、Node.js 5.6が必要です。 Node.js6。Node.js6は、apt-getインストールです。

また、pm2ツールを使用してデプロイします。

したがって、デフォルトの設定では、nvmが有効でないときにpm2プロセスが開始されるため、Node.js(バージョン6)のapt-getインストールが使用されます。したがって、メインのpm2デーモンはNode.js 6で始まります。アプリケーションをフォークモードで実行すると、それらは別々のプロセスで起動し、nvm設定が有効になります。アプリケーションをクラスターモードで実行すると、非nvm環境が継承されます。

そのため、クラスターモードに切り替えようとしたときに、5.6用にコンパイルされたバインディングがこのメッセージで失敗するため、アプリケーションの起動に失敗しました。

nvm設定が有効になっているときにpm2を再起動することで、これを修正しました。また、起動スクリプトも修正する必要があります。


どのように確認しますか?
— tamj0rd2

8

環境変数NODE_PATHが正しく設定され、node_modulesパスを指していることを確認します。nodejsはこの変数を使用してライブラリを検索します


私の差し迫った問題を解決し、このnode.jsドキュメントに導いたので、私はこれを支持しました。しかし、ドキュメントはモジュールを見つけるための代替戦略を示しているので、これは包括的な答えではないと思います。
— Graham Klyne

6

私は昨日このエラーを経験しました。のmainエントリが、package.json移動したファイルを指していることを理解するのにしばらく時間がかかりました。更新するとエラーが消え、パッケージは機能しました。


2
神聖な牛...絶望の外私はグーグルに「エラー:モジュールが見つかりません」と入力し、この質問を見つけました。あなたの答えは私の問題を解決しました。そのようなあいまいな検索用語が正しい答えになっているとは信じられません。あなたとGoogleへの称賛!
— Jamon Holmgren 2017

1
とてもこれ。mainサブモジュールのエントリをそのリポジトリから除外されたディレクトリにポイントすることができたので、それを介しnpm installてそれを含めようとしたときに機能しましたが、必要なときにエクスポートが見つかりませんでした!この明白だが有用な答えに感謝します。
— Dragos

これをありがとう。糸のワークスペースを使用しているときにこのような状況が発生したため、パス解決アルゴリズムとあらゆる種類を探していました。:)私は、エラーメッセージがモジュールの「検索」について語っている方法でスローされました。また、ESLintが同様のエラーメッセージを出力していることにも気付きました。そして、私はあなたの答えを見て、私が気まぐれであることに気付きました。ありがとう!
— Mark Birbeck

5

node_moduleプロジェクトからルートフォルダを削除します(例:)myApp。myAppフォルダに移動し、ターミナルから以下のコマンドを入力します

>myApp>npm install

プロジェクトに必要なすべての依存関係モジュールをインストールします。


提供するソリューションについてもう少し説明を追加して、回答を詳しく説明していただけませんか?
— abarisone

5

このエラーは、package.jsonにフィールドがrequire欠落しているか正しくないモジュールを使用している場合に発生する可能性がありますmain。モジュール自体はインストールされていますが、npm / nodeはモジュールへのエントリポイントとして単一の.jsファイルを使用する必要があります。場合mainを探しにフィールドが存在しない、それはデフォルトでindex.jsあなたのモジュールのフォルダに。あなたのモジュールのメインファイルがされている場合ではない index.jsと呼ばれ、それができなくなりますrequireそれ。

browserifyベースのモジュールをCommonJS対応のモジュールに変換中に発見されましたrequire。browserify欠けているmainフィールドは気にしなかったので、エラーは気付かれないままでした。


4

次のようにnode_modulesフォルダー内にあるrestlerフォルダーへのパスを指定します。var rest = require( './ node_modules / restler');

これでうまくいきました。


3

typescriptを使用していて、すべてのノードモジュールをインストールした後にエラーが発生する場合は、を削除しpackage-lock.jsonます。そして、実行しnpm installます。


2

プロのヒント:

疲労および軽度の病気を戦っている間、私が入力したため、このエラーが、私に起こったnode blahの代わりにnpm blah。

受け取ったエラーメッセージは、自分の愚かさを警告するほど怒っていませんでした。


2

チームの他の誰かがpackage.jsonSVNで更新したときにも、同じ問題に直面しました。単にnode_modulesディレクトリを削除しても役に立たなかった。私が問題を解決した方法は次のとおりです。

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

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


念押し有難う。私の場合、それはpackage-lock.jsonが再び物事を台無しにしていましたが、それを削除してnode_modulesを実行npm installした後、すべてを実行するとうまくいきます。
— TaeKwonJ​​oe

6
削除した場合、package.jsonNPMは何をインストールするかをどのようにして知っていますか
— ミハウ

1

チェックする場所をもう1つ追加できます。使用しようとしたパッケージは、プライベートNPMリポジトリに公開した独自のパッケージの1つです。package.jsonの「main」プロパティを適切に設定するのを忘れていました。そのため、パッケージは使用パッケージのnode_modulesフォルダーにありましたが、「モジュールが見つかりません」と表示されていました。私の失敗を理解するのに数分かかりました。:-(


1

私の場合UNMET PEER DEPENDENCY redux@^3.0.0、このエラーメッセージを引き起こしていました、それらすべてを見て、不足しているモジュールを--saveを使用して再度インストールしてください

npm install redux --save

1

node / npmを削除してから、安定した(最新ではない)バージョンを再インストールするとうまくいきました。

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/


0

自分のパッケージを公開して、それを別のプロジェクトに含めようとしていました。最初のモジュールをどのように構築したかにより、この問題が発生しました。ES2015エクスポートを使用してモジュールを作成します。たとえば、モジュールが次のようになっているとします。

export default function(who = 'world'){
    return `Hello ${who}`;
}

Babelでコンパイルした後、公開する前に:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

だからnpm install module-name別のプロジェクト(なしES2015)の後、私はしなければならなかった

var hello = require('module-name').default;

実際にパッケージをインポートするため。

お役に立てば幸いです。


0

での使用中にこの問題が発生しwebpackましたwebpack-dev-middleware。

なっていた1つのファイルをにフォルダ。

ウォッチャーは新しいフォルダを表示していないようで、モジュールがありませんでした。

プロセスを再起動することで修正されました。


0

誰かに役立つ可能性があり、一種の赤いニシンである異常なシナリオを見つけました。

また、Cannot Find Moduleエラーが発生しましたが、奇妙なことに、ローカル(Macホスト)のNode.js環境ですべてが完全に機能しました。この問題は、コードがLinuxサーバーにデプロイされたときにのみ発生しました。

まあ... MacベースのNode.jsインストールが(どうやら)無視して本当に良かったというタイプミスであることが判明しました。

インクルードは次のようになりました。

var S3Uploader = require('./S3Uploader.class');

しかし、実際のファイルは「s3Uploader.class.js」と呼ばれていました

コードとファイル名の「s」と「S」の大文字と小文字の違いに注意してください。

したがって、他の解決策で問題が解決しないという奇妙な機会に、インクルードされたファイル名の文字を誤って入力していないことを確認してください。:)

そしてDUH!


1
デフォルトでは、OSXファイルシステム(HFS +)は大文字と小文字を区別しません ...少し前に発見されましたが、確実に構成可能です
— giulp

0

たぶん私と同じように、「ビューエンジン」を存在しないエンジンにExpressで設定したか、未登録のテンプレートエンジンを使用しようとしました。以下を使用することを確認してください: app.engine('engine name',engine) app.set('view engine','engine name')


0

新しいCLI v3をインストールしてください(npm install -g ionic @ latest)。

この問題がCLI v3の問題である場合。ありがとうございました!


0

パッケージが正常にインストールされている場合は、node_modulesフォルダーに移動し、ファイルとパスを確認します。次にインポートします。お役に立てれば。


-3

まず第一に、はい、私の答えの一部は間違いなくOPによって投稿されたエラーを解決するのに役立ちます。次に、以下の手順を試した後、他のいくつかのエラーに直面したので、それらの解決策も記述しました。

(Psst!上記のエラーの解決に成功したかどうか、またはルールや回答の形式に違反したかどうかはわかりませんが、上記のエラーやその他の問題に直面し、見つけるのに時間がかかりましたこれらのエラーの適切な解決策です。万が一、他の誰かがこれらのエラーにも直面した場合、彼はうまくいけばここで解決策を得ることができるので、完全な解決策を書いています。

したがって、PrashanthiDeviによって提供された回答に追加して詳述し、私の個人的な経験も追加します。ここにそれがあります:

私はe2e全体とユニットテストの一部に不慣れです。私は分度器からこの部分を調べ始めました。これで、テストが記述されたファイルが既にありましたが、テストを実行する必要がありました。

必要なソフトウェアとツールはすべてインストール済みですが、テストを実行するためのコードを最初に実行したときにgulp itest、「モジュールが見つかりません」というエラーが発生しました。SOに関するさまざまな質問を検討した結果、解決策を得るのに役立つと思われる答えが1つ見つかりました。

その人はnpm install私のプロジェクトフォルダーでコマンドを実行することを提案していました。

これを行う理由は、プロジェクトフォルダー内のnode-modulesフォルダーを、必要なすべてのファイルと依存関係で更新するためです。

(以下の部分はおそらくこの質問とは無関係ですが、誰かが私が直面した同じ状況に遭遇した場合に役立つかもしれません。)

上記の手順で以前のエラーは確実に解決しましたが、新しいエラーがスローされました!今回はエラーCould not find chromedriver at '..\node_modules\protractor\selenium\chromedriver'です。

しかし、このエラーの解決策は私にはかなりばかげた(そしておかしい)ものでした。すでにセレンフォルダにchromedriverファイルがありました。しかし、私のchromedriverファイルがchromedriverフォルダー内ではなくseleniumフォルダー内にあったため、上記のエラーが発生していることがわかります。したがって、chromedriverフォルダーを作成し、そこにchromedriverファイルをコピーすることで私の問題は解決しました!

また、エラー:WebDriver Serverの待機中にタイムアウトしました。次のコード行をconf.jsファイルに追加できますexports.config{}:

seleniumAddress: 'http://localhost:8080/'

お役に立てれば!


-4

私はこの問題を解決する簡単な解決策を得ました。

C:\ Users \ UserName \ AppData \ Roaming \ npm \を削除するだけです

次にノードをインストールします。

これで問題は解決されます。


彼はUnixを使用しています。Windowsではありません。
— Saif Al Falah 2017年

-4

次のコマンドのみを実行します。

npm install

必要なすべてのモジュールがnode_modulesフォルダーにインストールされます。


-5
rm -rf node_modules
npm install
npm fund

それは私のために働く。


-38

ディレクトリを変更し、現在のプロジェクトフォルダーをポイントして、「npm install」を実行します。。

これにより、すべての依存関係とモジュールがプロジェクトフォルダーにインストールされます。


2
この答えは間違っているようではありません、私は否定的な投票がいくつかの偏見と皮肉なコメントのサポートの結果だと思います。
— Muqsith、

2
それだけの反対票は多すぎる。完全にあいまいではありません。それは受け入れられた答えに関連しています。答えはすべて、npm install正しいディレクトリで行うことです。それについて否定的なことは何もありません
— 忍
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.