このドキュメントを参照する
https://docs.nestjs.com/techniques/configuration
環境変数を使用するには、ConfigServicorderオーダーを使用することをお勧めします。
したがって、コードでは、次のようにアクセスします。
config.get('PORT')
すべての変数は.env
ファイルで定義されています。
ただし、本番環境で.env
を使用することはお勧めしません。それでは、どのように展開するのですか?
Dotenvおよびprocess.env.PORT
で標準メソッドを使用しないのはなぜですか?
ConfigService
の有用性を低下させる2つの問題があります。
最初
ない場合.env
ファイルはすべての環境に存在し、readFileSync
in
dotenv.parse(fs.readFileSync(filePath))
失敗します:
[Nest] 63403 [ExceptionHandler] path must be a string or Buffer
TypeError: path must be a string or Buffer
at Object.fs.openSync (fs.js:646:18)
at Object.fs.readFileSync (fs.js:551:33)
at new ConfigService (../config/config.service.ts:8:38)
たとえばprocess.env.API_KEY
利用可能です
this.configService.get('API_KEY')
何も返しません。したがって、ConfigService
はprod.env
ファイル、dotenvが反対するもの:
いいえ。「メイン」の.envファイルと、.env.testのような「環境」の.envファイルを作成しないことを強くお勧めします。設定はデプロイ間で異なる必要があり、環境間で値を共有しないでください。
https://github.com/motdotla/dotenv#should-i-have-multiple-env-files
2番目
使用するには、configモジュールをインポートしてサービスを注入する必要があります。このような環境変数を使用すると
imports: [
MongooseModule.forRoot(process.env.MONGO_URI, { useNewUrlParser: true }),
ConfigModule,
],
設定サービスは役に立たない。
環境の構成について詳しくは、こちらをご覧ください: https://12factor.net/config
ただし、本番環境で.envを使用することはお勧めしません。それでは、どのように展開するのですか?
実際、お勧めしませんコミットする .envファイル。これらを本番環境で使用するのはまったく問題ありません:-)。
Dotenvおよびprocess.env.PORTで標準メソッドを使用しないのはなぜですか?
decoupling構成データの提供を担当するコードからコアコードを許可します。したがって:
process.env
を手動で変更/モックするのはsuch-a-painですが、モックは「ConfigService
」はかなり簡単ですprocess.env.*
を置き換えるのではなく、専用クラスの単一のメソッド(またはいくつかのゲッター)を置き換えることで、将来環境変数以外のものを使用することを想像できます//公平にするために、envを使用しているので、これは起こりそうにありません。変数は、構成データをロードするための最も一般的な方法ですが、それでもなお使用できます。