如何在应用程序中间将节点环境设置为环境变量?
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"
但希望听到更好的建议。
我知道我可以 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"
但希望听到更好的建议。