web-dev-qa-db-ja.com

カスタムのprocess.envがdotenv内で機能しないのはなぜですか?

API秘密鍵を含めることは悪い習慣であることを知り、いくつかの調査を行い、カスタムprocess.envの作成方法を学習しようとしました。

読んだあと:

process.env.NODE_ENVに基づいてローカルにenvファイルを設定しようとしています。アプリケーションはHerokuでホストされ、私の.gitignoreにはdev.envがありますが、ローカルで dotenv を使用しようとすると、undefinedを取得します。端末でexport NODE_ENV=developmentを使用してローカルに環境を設定しました。コマンドnpm startまたはnodemonを実行すると、どちらもundefinedが返されますが、env.jsTesting for: developmentを取得します。例:

nodemon

[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
Testing for: development
undefined

ここに私が持っているものがあります:

app.js

const keys = require('./config/env')
return console.log(process.env.PORT)

config/env.js

const env = process.env.NODE_ENV
console.log(`Testing for: ${env}`)
try {
  switch(env) {
    case 'undefined':
      Error('Environment undefined, if local in terminal: export NODE_ENV=development')
      break
    case 'development':
      require('dotenv').config({
        path: './dev.env'
      })
      break
    case 'production':
      require('dotenv').config({
        path: './prod.env'
      })
      break
    default:
      Error('Unrecognized Environment')
  }  
} catch (err) {
  Error('Error trying to run file')
}

config/dev.env

## Port number to run Application
PORT=4321

しかし、app.jsでは、return console.log(process.env.PORT)またはreturn console.log(keys.PORT)でテストすると、どちらもundefinedをログに記録しますが、なぜですか? dotenvを使用しているとき、env.jsで問題が発生しているようです。

明確にするために、私はまだHerokuにプッシュしておらず、prod.envが検証されます。より良いアプローチがある場合は教えてください。

こんにちは最初にswitch(env.trim())を使用し、次にパス値path: './config/dev.env'を変更します。幸運を。

0

Herokuはdotenvでは動作しません。

特定のHerokuアプリの設定ページ内に「Config Vars」と呼ばれるものがあります。

例えば

Heroku Config Vars

あなたの例では、コードがアクセスしたい場合:process.env.NODE_ENV、指定したアプリのHeroku設定ページ内に新しい構成変数を設定し、それをNODE_ENV。必要な値を設定し、保存を押します。出来上がり。できました。

Dotenvの付加価値は通常、ローカルマシンでのテスト用です。

0
Elisha Kramer