1. ホーム
  2. javascript

[解決済み] NODE_ENVをnpmスクリプトに渡す(Windows 10用

2022-02-28 07:15:48

質問

を使っています。 webpack をTypescriptプロジェクトで使用しています。私は チュートリアル を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クエリ を設定します。 NODE_ENV をWindows 10用に変更しました。

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

をどのように変更すればよいのでしょうか? scripts での package.json ビズ $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"
    
    

    そして、これがそれぞれのスクリプトを起動させるはずです。

しかし、これでは、env.変数を設定しながら一般的な 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

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

解決方法は?

この問題は、@ambienBeing さんのコメントに基づいて解決することができました。ただし、いくつか注意点があります。

  • その && しない PowerShell しかし ワークス cmd
  • の代わりに $NODE_ENV を適応させる必要がありました。 %NODE_ENV%"scripts" 部分

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

以下を実行すると。

 set NODE_ENV=production&&npm run build

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

念のため console.log("production") と同様に console.log("development") をそれぞれの webpack.x.js ファイル

という文字列がコンソールに2回表示されるのを確認しました。 echo とファイルから1個

テスト内容

  • これは、VS Code でデフォルトのシェルを cmd ではなく PowerShell