479

同様のコマンドpackage.jsonで使用するために内部からいくつかの環境変数を設定する方法は?npm start

これが私が現在持っているものですpackage.json

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "tagove start"
  }
  ...
}

NODE_ENV1 つのコマンドだけでアプリを起動できるようにしながら、起動スクリプトで環境変数 ( など) を設定したいと考えていますnpm start

4

18 に答える 18

625

スクリプト コマンドで環境変数を設定します。

...
"scripts": {
  "start": "node app.js",
  "test": "NODE_ENV=test mocha --reporter spec"
},
...

次にprocess.env.NODE_ENV、アプリで使用します。

注: これはMac と Linux のみです。Windows の場合は、コメントを参照してください。

于 2014-11-23T15:38:49.497 に答える
321

NPM パッケージcross-env を使用するだけです。超簡単。Windows、Linux、およびすべての環境で動作します。&& を使用して次のタスクに移動しないことに注意してください。環境を設定して、次のタスクを開始するだけです。ここのコメントの 1 つでの提案については、@mikekidderの功績によるものです。

ドキュメントから:

{
  "scripts": {
    "build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
  }
}

複数のグローバル変数を設定する場合は、それらを連続して記述し、その後に実行するコマンドを続けることに注意してください。

最終的に、(spawn を使用して) 実行されるコマンドは次のとおりです。

webpack --config build/webpack.config.js

NODE_ENV環境変数は cross-env によって設定されます

于 2016-05-20T22:52:21.553 に答える
70

将来の Node-explorer のために、ここに 2 セントを追加したかっただけです。私のUbuntu 14.04ではNODE_ENV=test機能しませんでした。使用する必要がexport NODE_ENV=testあり、その後も機能しNODE_ENV=test始めました。奇妙なことです。

Windowsでは使用する必要があると言われていますがset NODE_ENV=test、クロスプラットフォームソリューションの場合、 cross-env ライブラリはトリックを実行していないようで、これを行うにはライブラリが本当に必要ですか:

export NODE_ENV=test || set NODE_ENV=test&& yadda yadda

export NODE_ENVそうしないと、認識されないコマンドで Windows がクラッシュするため、垂直バーが必要です。末尾のスペースについてはわかりませんが、念のためにそれらも削除しました。

于 2016-04-02T12:17:12.233 に答える
29

Try this on Windows by replacing YOURENV:

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV && tagove help",
       "start": "set NODE_ENV=YOURENV && tagove start"
     }
    ...
  }
于 2018-11-29T12:42:49.673 に答える
9

Windows で git bash を使用します。Git Bash はコマンドを cmd とは異なる方法で処理します。

そのように NODE_ENV=production で環境変数を設定すると、ほとんどの Windows コマンド プロンプトがチョークします。(例外は、ネイティブ Bash を使用する Windows 上の Bash です。) 同様に、Windows と POSIX コマンドが環境変数を利用する方法にも違いがあります。POSIX では $ENV_VAR を使用し、Windows では %ENV_VAR% を使用します。- クロス環境ドキュメント

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "env NODE_ENV=production tagove start"
  }
  ...
}

dotenv パッケージを使用して環境変数を宣言します

于 2020-04-30T14:21:51.407 に答える
5
{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}
于 2018-11-24T11:25:00.557 に答える
2

質問に直接答えるわけではありませんが、他の回答に加えてアイデアを共有したいと思います。私が得たものから、これらのそれぞれは、クロスプラットフォームの独立性を達成するためにある程度の複雑さを提供します.

私のシナリオでは、もともと、JWT認証でサーバーを保護するかどうかを制御する変数を設定する必要がありました(開発目的)。

回答を読んだ後、認証をそれぞれオンとオフにして、2 つの異なるファイルを作成することにしました。

  "scripts": {
    "dev": "nodemon --debug  index_auth.js",
    "devna": "nodemon --debug  index_no_auth.js",
  }

これらのファイルは、元の index.js ファイル (名前を に変更したものappbootstrapper.js)を呼び出す単純なラッパーです。

//index_no_auth.js authentication turned off
const bootstrapper = require('./appbootstrapper');
bootstrapper(false);

//index_auth.js authentication turned on
const bootstrapper = require('./appbootstrapper');
bootstrapper(true);

class AppBootStrapper {

    init(useauth) {
        //real initialization
    }
}

おそらく、これは他の誰かを助けることができます

于 2017-01-17T03:08:16.547 に答える
1

で ENV 変数を設定しないでくださいpackage.json。actionhero はNODE_ENV、 のファイルから読み込まれた設定オプションを変更できるようにするために使用します./configredis config fileを調べて、 NODE_ENVを使用してデータベース オプションを変更する方法を確認してください。NODE_ENV=test

他の ENV 変数を使用して (おそらく HTTP ポート) を設定する場合でも、 で何も変更する必要はありませんpackage.json。たとえばPORT=1234、ENV で設定し、それを の HTTP ポートとして使用する場合NODE_ENV=productionは、関連する構成ファイル IE でそれを参照するだけです。

# in config/servers/web.js
exports.production = { 
  servers: {
    web: function(api){
      return {
       port: process.env.PORT
      }
    }
  }
}
于 2014-08-04T17:14:46.277 に答える
1

最もエレガントでポータブルなソリューション: package.json:

"scripts": {
    "serve": "export NODE_PRESERVE_SYMLINKS_MAIN=1 && vue-cli-service serve"
    },

windows作成して、あなたのexport.cmdどこかに置きます%PATH%

@echo off

set %*
于 2021-09-17T12:38:07.413 に答える