web-dev-qa-db-ja.com

Windows 10のnpmスクリプトにNODE_ENVを渡す

TypeScriptプロジェクトでwebpackを使用しています。私は tutorial に従っており、3つのwebpackファイルを作成しました。

  1. webpack.common.js
  2. webpack.production.js
  3. webpack.development.js

チュートリアルのpackage.json内の"scripts"秒には、以下があります。

"build": "webpack --config webpack.$NODE_ENV.js"

私は 以下のSEクエリ を調べて、Windows 10のNODE_ENVを設定しています。

PowerShell内で実行する場所:

$env:NODE_ENV="development"

ただし、npm run buildを実行すると、スクリプトは$NODE_ENVを文字列として受け取り、値を置き換えません。

これでうまくいかない場合は、後でcross-envに移行する可能性がありますが、PowerShellで環境変数を試してみたいと思います。

同等のコマンドは次のとおりです。

NODE_ENV=development npm run build
NODE_ENV=production npm run build

ウィンドウでは、package.jsonscriptsをどのように変更すればよいですか。 $NODE_ENV変数を受け入れますか?

cross-envの使用

以下を実行することにより、cross-envを使用して同様のことを実現できます。

  1. npm i --save-dev cross-env
  2. "scripts"内に追加:

     "build-dev": "cross-env NODE_ENV=development webpack --config webpack.%NODE_ENV%.js"
     "build-prod": "cross-env NODE_ENV=production webpack --config webpack.%NODE_ENV%.js"
    

    これにより、それぞれのスクリプトがトリガーされます。

ただし、これはユーザーが環境変数を設定している間に汎用のnpmスクリプトコマンドを実行する柔軟性をまだ提供していません。変数オンザフライ

PowerShellの制限

クエリが次のようなことを提案する例があります:

  set NODE_ENV=production&& npm run build

しかし、これはPowerShellで次のエラーで失敗します。

At line:1 char:24
+ set NODE_ENV=production&& npm run build-dev
+                        ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

また、&は将来使用するために予約されています。

5
Shan-Desai

@ambienBeingからのコメントに基づいて、この問題を解決することができました。ただし、ここにいくつかの警告があります。

  • _&&_ DOES NOTPowerShellで機能しますが、[〜#〜] works [〜#〜]cmdで機能します
  • _$NODE_ENV_の代わりに_%NODE_ENV%_の部分に_"scripts"_を適用する必要がありました

    _"build": "echo %NODE_ENV% && webpack --config webpack.%NODE_ENV%.js"
    _

以下を実行すると:

_ set NODE_ENV=production&&npm run build
_

スクリプトは正しく実行されます。

念のため、それぞれの_webpack.x.js_ファイルにconsole.log("production")console.log("development")を追加しました

そして、私はコンソールに2回出力されたそれぞれの文字列を見ることができました:echoからの1 xとファイルからの1 x

テスト

  • これは、デフォルトのシェルをcmdではなくPowerShellに変更すると、VSコードで完全に機能します。
1
Shan-Desai