我有一个使用 npm init -y 创建的基本应用程序。在 package.json 中,我有一个指向 server.js 的主条目。
{
"name": "rest-api",
"version": "1.0.0",
"description": "",
"main": "server.js",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"prestart": "SET NODE_ENV=dev"
}
Run Code Online (Sandbox Code Playgroud)
我试图在预启动中设置 NODE_ENV 变量,并让 npm 调用 main 来调用 npm start。但是预启动中设置的环境变量不会被继承并且未定义。当我运行“npm start”时,控制台输出两个命令都按顺序执行。
PS D:\test\RestAPI> npm start
> rest-api@1.0.0 prestart D:\test\RestAPI
> set NODE_ENV=dev
> rest-api@1.0.0 start D:\test\RestAPI
> node server.js
undefined
[undefined] Listening on http://localhost:3000
Run Code Online (Sandbox Code Playgroud)
但是当我从应用程序打印变量时,它是未定义的。我在这里做错了什么,或者这是它应该表现的方式吗?有没有办法使用“SET NODE_ENV=dev”调用和设置环境变量,而不将其链接到“node server.js”
当我将两者组合在“开始”中时,如下所示,然后设置环境变量。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "set NODE_ENV=dev && node server.js"
}
Run Code Online (Sandbox Code Playgroud)
我正在 Windows 10、npm 版本 3.10.10 上对此进行测试。感谢你的帮助。
我知道如何使用“start”在 package.json 中完成此操作。这个问题具体涉及如何通过“预启动”来实现这一点。
谢谢。
简短的回答是不可能的。
1. 为什么: 这是不可能的,因为 npm 为此目的而生成的不同进程执行的每个脚本都有自己的环境变量。
要实现这一点,请创建测试项目并将两个脚本配置为类似
"start": "pause&&set VAR1",
"prestart" : "pause&&set VAR1=value&&set VAR1&&pause",
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,打开任务管理器,并在运行脚本之前密切注意列出了多少个 cmd 进程。
运行命令“npm start”,并在每次请求时“按任意键继续...”,只需注意创建的进程是如何创建的。我按顺序附上了屏幕截图

2.除非: 您更改 npm 执行不同脚本的方式,以对所有脚本使用一个 cmd,我认为这很复杂,并且可能会产生错误。
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |