20

私はUbuntu12.04を使用しており、環境変数について学習しています。アプリケーション内からカスタム変数を読み取ろうとしていますが、常にとして表示されundefinedます。これが私のテストアプリのコードです:

// app.js

console.log('Value: ' + process.env.NODE_ENV);

次のコマンドを実行すると、変数に値があることがわかります。

$ NODE_ENV=production
$ echo $NODE_ENV
production

echo $NODE_ENV一日中できますが、引き続き「本番process.env.NODE_ENV環境」が表示されますが、Nodeアプリケーションで表示すると、常に「未定義」と表示されます。

$ node app.js
Value: undefined

これは奇妙な部分ですが、すでに存在していることがわかっている別の環境変数を表示すると、たとえばprocess.env.PATH、それは機能します。

$ node app.js
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

もう1つの癖は、正しい値が表示されているにもかかわらず、コマンドprintenv listにカスタム変数が含まれていないように見えることです。も何も表示されませんが、ノードアプリケーションでアクセスしたときと同じように適切な値が表示されます。NODE_ENVecho $NODE_ENVprintenv NODE_ENVprintenv PATHPATH

4

6 に答える 6

32

exportシェルで実行するプロセスで変数を使用できるようにするには、変数をシェル化する必要があります。

このコマンドの出力を比較します。

FOO=bar; bash -c 'echo $FOO'

これの出力で:

export FOO=bar; bash -c 'echo $FOO'
于 2012-05-29T17:12:40.400 に答える
12

私は本当にばかげた何かからここに自分の道を見つけました。

新しいエクスポートされた変数を追加したばかりですが、ノードプロセスはまだそれらを認識していませんでした。次に、ノードプロセスを再起動するだけでは不十分であることに気付きました。新しいターミナル(つまり、bashインスタンス)も開く必要がありました。私がこれをしたら、それはうまくいきました:)

于 2014-05-10T12:26:23.093 に答える
1

を使用している場合dotenvは、環境内の変数にアクセスする前に必ず構成してください。コードの順序はjsで重要です。

于 2021-10-10T21:16:14.907 に答える
0

アプリの構成を管理するためにライブラリを使用することを検討することをお勧めします。

たとえば、nconfは次の方法で構成を管理するのに役立ちます

  • コマンドライン引数
  • 環境変数
  • ファイル
  • 等..

そして、ソースを見ることはhttps://github.com/flatiron/nconfを学ぶための良い方法です

于 2012-05-30T00:08:04.133 に答える
0

本当にばかげたものからもここで私の道を見つけました!メインプロジェクトディレクトリ内の「src」フォルダからサーバーファイルを実行していたため、.envは「src」フォルダ自体(サーバーが実行されていた場所)内にありました。メインのプロジェクトディレクトリに.envを置くと、うまくいきました。'.env'が「src」フォルダ内ではなくメインディレクトリにあることを確認してください。

于 2021-04-23T18:51:15.733 に答える
-1

bashを再起動します(ソース〜/ .bashrc)。これにより、システム環境が考慮されます。

于 2019-02-01T16:13:48.193 に答える