如何在应用程序中间将节点环境设置为环境变量?

How to set Node Environment as Env Variable in the middle of the app?

我知道我可以 process.env.NODE_ENV = TEST 但它对我不起作用。相关代码如下:

test.js

import server from "../../src/index.js";

process.env.NODE_ENV = "test";
console.log(process.env.NODE_ENV);  // returns "test"
chai.use(chaiHttp);

// calls server here with chai-http

src/index.js

import express from "express";
import dotenv from "dotenv";

dotenv.config();

const app = express();

// Some API endpoint here that calls getUserFromUserId

app.listen(port, () => {
  logger.info(`App running on http://localhost:${port}`);
});

export default app;

user.js

console.log(process.env.NODE_ENV)  // returns undefined
process.env.NODE_ENV = "test"  // manually sets it here again
console.log(process.env.NODE_ENV)  // returns test correcly this time

所以这里的问题是,当我 运行 test.js 时,我正在导入,因此 运行ning user.js 在我设置 NODE_ENV 之前.由于进口被吊起,我也不能更早地进行环境设置。但是,我需要 user.js 在测试时表现不同,因此我需要在 运行 宁 user.js 代码之前设置 NODE_ENV 。我怎样才能做到这一点?

编辑: 我尝试将我的测试脚本更改为 'test: SET NODE_ENV=test && mocha'。 这似乎设置了节点环境,但我仍然面临问题。

user.js

console.log(process.env.NODE_ENV);  // returns test
console.log(process.env.NODE_ENV === "test");  // returns false
process.env.NODE_ENV = "test";
console.log(process.env.NODE_ENV);  // returns test
console.log(process.env.NODE_ENV === "test");  // returns true

2 'test' 不知何故不同?还有一个问题是 SET 是 Windows-特定的。

现在我已经决定安装 cross-env 并执行

"test" : "cross-env NODE_ENV=test mocha"

但希望听到更好的建议。