web-dev-qa-db-ja.com

Package.json内から環境変数を設定する方法[Node.js]

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

これが私の現在のpackage.jsonにあるものです。

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

ここで、起動スクリプトに環境変数(NODE_ENVなど)を設定しながら、1つのコマンドnpm startだけでアプリを起動できるようにします。

217
dev.meghraj

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

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

その後、アプリでprocess.env.NODE_ENVを使用します。

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

287
cesar

NPMパッケージ cross-env を使用するだけです。超簡単です。 Windows、Linux、およびすべての環境で動作します。次のタスクに進むために&&を使用しないことに注意してください。環境変数を設定してから、次のタスクを開始するだけです。 @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によって設定されます。

161
TetraDev

私は将来の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がクラッシュする可能性があるため、縦線は必要です。末尾のスペースについてDunnoが、私もそれらを削除したことを確認するためだけに。

32
TeemuK

突然私はactionheroが次のコードを使用していることに気付きました。それはstart script commandオプションに--NODE_ENV=productionを渡すことによって私の問題を解決しました。

if(argv['NODE_ENV'] != null){
  api.env = argv['NODE_ENV'];
} else if(process.env.NODE_ENV != null){
  api.env = process.env.NODE_ENV;
}

package.jsonやinitスクリプトなどの環境変数を設定するためのより良い方法を知っている他の誰かの回答を受け入れることを本当に感謝します。

7
dev.meghraj

WindowsでYOURENVを置き換えて試してください。

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV&& tagove help",
       "start": "set NODE_ENV=YOURENV&& tagove start"
     }
    ...
  }
5
Pascal Mayr

私は自分自身が複数の環境変数を扱うことが多いので、それらを別の.envファイルに保存しておくと便利です(ソース管理からはこれを無視してください)。

VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break

次に、スクリプトコマンドの前にexport $(cat .env | xargs) &&を追加します。

例:

{
  ...
  "scripts": {
    ...
    "start": "export $(cat .env | xargs) && echo do your thing here",
    "env": "export $(cat .env | xargs) && env",
    "env-windows": "export $(cat .env | xargs) && set"
  }
  ...
}

テストのためにnpm run env(linux)またはnpm run env-windows(windows)を実行することでenv変数を見ることができます。

4
Luke

より大きな環境変数セットの場合、またはそれらを再利用する場合は、 env-cmd を使用できます。

./.envファイル:

# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH

./package.json

{
  "scripts": {
    "test": "env-cmd mocha -R spec"
  }
}
2
KARASZI István

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

私のシナリオでは、当初、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
    }
}

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

{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}
1
Cailean

package.jsonにENV変数を設定しないでください。 actionheroはNODE_ENVを使用して、./config内のファイルからロードされる構成オプションを変更できるようにします。 redis設定ファイル をチェックして、NODE_ENVがNODE_ENV=testのデータベースオプションを変更するためにどのように使われるかを見てください。

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

# in config/servers/web.js
exports.production = { 
  servers: {
    web: function(api){
      return {
       port: process.env.PORT
      }
    }
  }
}
1
Evan

これは Windowsコンソール :で動作します。

"scripts": {
  "aaa": "set TMP=test && npm run bbb",
  "bbb": "echo %TMP%"
}

npm run aaa

出力:test

詳しくは この答え をご覧ください。

0
Sergey