如何运行NPM运行脚本并传递环境变量(调用适当的env.{env}文件)?

huangapple go评论65阅读模式
英文:

How to run NPM run script passing env variable (calling the appropriate env.{env} file)?

问题

我在NodeJs应用程序上,已经创建了两个文件:

.env
.env.production

在第一个文件中,我有开发环境的设置,在第二个文件中,我有生产环境的设置。

现在,在本地运行时,我想要执行以下操作:

npm run jobs_orders

在package.json文件中配置如下:

"scripts": {
    "job_orders": "supervisor --mode production jobs/job_orders.js",
}

但是在应用程序中后来执行以下操作时:

import 'dotenv/config';
...
process.env.DATABASE_CONNECTION_STRING

它总是读取.env文件中的DATABASE_CONNECTION_STRING设置,而不是.env.production文件中的设置。

我错在哪里?我该如何修复它?

英文:

I'm on NodeJs app, I've create two files:

.env
.env.production

on the first I have dev settings, on the later prod settings.

Now, running on local, I'd like to do this:

npm run jobs_orders

Configured this way within package.json:

"scripts": {
    "job_orders": "supervisor --mode production jobs/job_orders.js",
},

But later on app, when doing:

import 'dotenv/config';
...
process.env.DATABASE_CONNECTION_STRING

it always read the DATABASE_CONNECTION_STRING settings on .env file, not the one on env.production.

Where am I wrong? And how do I fix it?

答案1

得分: 1

因为 dotenv 默认会加载位于 path.resolve(process.cwd(), '.env') 的环境变量。

您可以设置 process.env.NODE_ENV 变量来确定加载不同环境的 .env 文件。

index.mjs:

import { config } from 'dotenv';
import path from 'path';

const nodeEnv = process.env.NODE_ENV || '';

config({ path: path.resolve(process.cwd(), `.env${nodeEnv ? '.' + nodeEnv : ''}`) });

console.log('process.env.DATABASE_CONNECTION_STRING: ', process.env.DATABASE_CONNECTION_STRING);

.env

DATABASE_CONNECTION_STRING=dev

.env.production

DATABASE_CONNECTION_STRING=prd

开发环境:

$ node index.mjs 
process.env.DATABASE_CONNECTION_STRING:  dev

生产环境:

$ NODE_ENV=production node index.mjs 
process.env.DATABASE_CONNECTION_STRING:  prd

参考链接:

Node 版本: v14.21.3

英文:

Because dotenv will load the environment variables located in path.resolve(process.cwd(), '.env') by default.

You can set the process.env.NODE_ENV variable to determine which .env to load for different environments.

index.mjs:

import { config } from 'dotenv';
import path from 'path';

const nodeEnv = process.env.NODE_ENV || '';

config({ path: path.resolve(process.cwd(), `.env${nodeEnv ? '.' + nodeEnv : ''}`) });

console.log('process.env.DATABASE_CONNECTION_STRING: ', process.env.DATABASE_CONNECTION_STRING);

.env

DATABASE_CONNECTION_STRING=dev

.env.production

DATABASE_CONNECTION_STRING=prd

Development:

$ node index.mjs 
process.env.DATABASE_CONNECTION_STRING:  dev

Production:

$ NODE_ENV=production node index.mjs 
process.env.DATABASE_CONNECTION_STRING:  prd

Reference:

Node version: v14.21.3

huangapple
  • 本文由 发表于 2023年7月20日 21:42:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76730517.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定