package.json
のようなコマンドで使用するためにnpm start
内からいくつかの環境変数を設定する方法
これが私の現在のpackage.json
にあるものです。
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
ここで、起動スクリプトに環境変数(NODE_ENV
など)を設定しながら、1つのコマンドnpm start
だけでアプリを起動できるようにします。
スクリプトコマンドで環境変数を設定します。
...
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --reporter spec"
},
...
その後、アプリでprocess.env.NODE_ENV
を使用します。
注:これは MacおよびLinuxのみ です。 Windowsの場合は、コメントを参照してください。
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によって設定されます。
私は将来の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が、私もそれらを削除したことを確認するためだけに。
突然私は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スクリプトなどの環境変数を設定するためのより良い方法を知っている他の誰かの回答を受け入れることを本当に感謝します。
WindowsでYOURENV
を置き換えて試してください。
{
...
"scripts": {
"help": "set NODE_ENV=YOURENV&& tagove help",
"start": "set NODE_ENV=YOURENV&& tagove start"
}
...
}
私は自分自身が複数の環境変数を扱うことが多いので、それらを別の.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変数を見ることができます。
より大きな環境変数セットの場合、またはそれらを再利用する場合は、 env-cmd
を使用できます。
./.env
ファイル:
# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH
./package.json
:
{
"scripts": {
"test": "env-cmd mocha -R spec"
}
}
直接質問に答えるのではありませんが、他の答えに加えて考えを共有したいと思います。私が得たものから、それぞれがクロスプラットフォームの独立性を達成するためにある程度の複雑さを提供するでしょう。
私のシナリオでは、当初、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"
}
...
}
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
}
}
}
}
これは Windowsコンソール :で動作します。
"scripts": {
"aaa": "set TMP=test && npm run bbb",
"bbb": "echo %TMP%"
}
npm run aaa
出力:test
詳しくは この答え をご覧ください。