1. ホーム
  2. node.js

[解決済み] NODE_OPTIONS="-max-old-space-size=2048"」はどこに設定すればいいのでしょうか?

2022-03-08 05:25:41

質問

アプリケーションで "npm start" を実行すると、次のようなエラーが発生します。 FATAL ERROR: Ineffective mark-compacts near heap limit 割り当てに失敗しました - JavaScript ヒープがメモリ不足です。

ネットに投稿された解決策のほとんどは、NODE_OPTIONS="-max-old-space-size=2048"でメモリを増加させることです。しかし、これをどこに設定すればいいのか見当もつきません。いくつかの投稿では、私のプロジェクトにはない.bashrcファイルについて話しています。また、私はWindowsシステム上にいます。npm start"コマンドは、package.jsonで設定されたように、"npm run build-semantic && react-scripts start"を実行します。

解決方法は?

このフラグを使用する方法は複数考えられます。ここでは8GBを例にしていますが、プロジェクトに応じて選択してください。

最初のオプション

もともとOPが探していたのは 環境変数 . その NODE_OPTIONS --max-old-space-size 環境変数により、Nodeの最大ヒープサイズを増やすことができます。環境変数を設定することで、Nodeが環境からこの値を読み取ることができるため、Nodeコマンドを実行するたびに引数としてこの値を渡す必要はありません。これはグローバルな値として設定され、すべてのNodeプロセスで利用することができます。

環境変数の設定方法は、OSによって異なります。これについては、以下の2つのSOポストを参照してください。

要約すると NODE_OPTIONS .

export NODE_OPTIONS="--max-old-space-size=8192"

このコマンドをターミナルセッションに置くと、新しいセッションのたびに実行する必要があります。それを避けるために、シェルスクリプトファイルにこのコマンドを記述しておくと、ターミナルが自動的にそれを読み込んでくれるようになります。

OPで述べた.bashrcファイルはLinux環境にも存在し、ほとんどのコメントで bashを再読み込みする のような手っ取り早い方法として source ~/.bashrc で、現在のセッションの env vars をロードします。ターミナルを再起動すればいつでも再読み込みできますが、前者の方が好ましいです! 繰り返しますが、Windowsを使用している場合は無視してください。

第二の選択肢

さて、環境変数を設定するのが好ましくない場合は、常に --max-old-space-size のどちらか、またはnodeコマンドを実行する際に使用します。 Nodejs.orgのドキュメントからの例

$ node --max-old-space-size=8192 index.js

第3の選択肢

あるいは、OPさんが既に回答されているように、プロジェクト単位で設定することも可能ですが、プロジェクトによって実装が異なる可能性があります。

について npm スクリプトは、この Git のコメントで答えられます。 npm を実行するときに --max-old-space-size を設定する最適な方法 ( 私は、それは hyphens ではなく underscore ):

"scripts": 
{
    "start": "cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack"
}

Angularのプロジェクトでは、次のように定義することができます。

"scripts":
{
    "build-prod": "node --max-old-space-size=8192 ./node_modules/@angular/cli/bin/ng build --configuration=production"
}