ChatGPT解决这个技术问题 Extra ChatGPT

“NODE_ENV”不是内部或外部命令、可操作命令或批处理文件

我正在尝试为 Node.js 应用程序设置环境。但我每次都收到这个错误。

“NODE_ENV”不是内部或外部命令、可操作命令或批处理文件。

这是什么意思,我该如何解决这个问题?

我正在使用 Windows,也尝试过 set NODE_ENV=development 但没有运气。


l
laggingreflex

我为此编写了一个模块:win-node-env

它创建一个设置 NODE_ENV 环境变量的 NODE_ENV.cmd,并使用命令的其余部分及其参数生成一个子进程。

只需(全局)安装它,然后运行你的 npm 脚本命令,它应该会自动使它们工作。

npm install -g win-node-env

有用!而且我不必更改任何命令。这就是答案。
这是最简单的答案
如何将自定义变量添加到您的脚本?
@ivan-ivory 第一个变量(即 NODE_ENV)必须保持不变(否则它必须是一个完全独立的脚本)。至于在它之后添加自定义变量(即 NODE_ENV=dev SOME_VAR=val),我将不得不修改脚本的逻辑以从 process.argv 解析更多变量。我一直在考虑,但没有时间。随时提出拉取请求。
没有为我工作。我得到: > NODE_ENV=development node_modules/.bin/nodemon --ignore ./public/tones/ --exec babel-node server/index.js 'node_modules' 不是内部或外部命令,可运行程序或批处理文件。
J
Jim O'Neil

听起来您的错误来自尝试运行这样的东西(在 Linux 中有效)

NODE_ENV=development node foo.js

Windows中的等价物是

SET NODE_ENV=development
node foo.js

在同一个命令外壳中运行。您提到 set NODE_ENV 不起作用,但不清楚如何/何时执行它。


谢谢吉姆,我在命令行中使用它并从 package.json 文件中删除。但在那之后我又遇到了另一个。看起来windows不完全支持节点模块。 bcrypt 和 gyp 出现另一个错误。
这里不是专家,但 bcrypt 显示对 windows 的支持,但确实需要 openSSL,不确定这是否有帮助。如果没有,可能想发布一个新问题,因为情况发生了一些变化。
虽然这确实有效,但我认为@Susan-stack 给出了正确的答案 - 一个跨平台的解决方案,而不是改变线路以在 Windows 上工作但破坏其他操作系统。
赞成 Susan 的回答 - 原始响应早于跨环境模块
@krozero 尝试再次安装所有可能对您有所帮助的软件包
M
Mahmudul Hasan

对于 Windows,也可以在命令之间使用 &。喜欢,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }

该命令有效,但 NODE_ENV 的值为“development”(“t”和“&”之间的空格将包含在 NODE_ENV 中)
正是@roroinpho21 所说的。现在我必须稍后.trim() 值才能使 process.env.NODE_ENV == 'production' 工作。无论如何要避免在oneliner中发生这种情况?
不能让它工作的人,"test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" 错误 "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" 正确你需要把js文件周围的 ' ' 去掉。
如果您尝试运行 npm start 将生产模式设置为生产,这正是您想要的。
这实际上是比接受的答案更好的答案。我没有遇到类似上述评论的任何问题:)
M
Matthieu Riegler

npm install --save-dev "cross-env" 模块。修改代码为cross-env NODE_ENV=development node foo.js。然后你可以运行类似的 npm run build。


请不要忘记将 cross-env 包含到 package.json 中的依赖项中
跨环境最佳答案!
库在这里:github.com/kentcdodds/cross-env - 该页面说在 devDependencies npm install --save-dev cross-env 中包含跨开发;当 npm 脚本说 env VARNAME=varvalue && ... 时,这也有助于解决错误 'env' is not recognized as an internal or external command(只需删除 env 并插入 cross-env)。开发人员无需全局安装或为不同平台使用不同的 npm 脚本!
这应该是公认的答案。这是一个平台无关的解决方案
同意。这个答案涵盖了任何环境变量,而不仅仅是节点环境变量。最佳答案!
A
AmerllicA

使用 win-node-env,要使用它,只需在 cmdpower shellgit bash 上运行以下命令:

npm install -g win-node-env

之后一切都像Linux。


R
Rohit Goel

我遇到了同样的问题,在 Windows 平台上,我只运行了以下命令

npm install -g win-node-env

一切正常


工作就像一个魅力,在我们跨多个平台(Mac 和 Windows)开发的项目中需要这个。
这到底是做什么的?
F
Flion
set NODE_ENV=production & nodemon app/app.js

将导致 NODE_ENV 在末尾包含一个空格:

process.env.NODE_ENV == 'production'; //false
process.env.NODE_ENV == 'production '; //true

如评论 here 中所述,请改用:

NODE_ENV=production&& nodemon app/app.js

这是一个救生员!
你是男人,完美地工作
设置 NODE_ENV=production & nodemon app/app.js perfact
J
Jon Crowell

更改脚本以适应 Windows 是一件非常痛苦的事情。试图找出适当的 Windows 翻译并维护 2 套脚本是没有办法过上你的生活的。

将 npm 配置为在 Windows 上使用 bash 要容易得多,并且您的脚本将按原样运行。

只需运行 npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"。确保 bash 可执行文件的路径对于您的机器是正确的。 您可能需要启动终端的新实例才能使更改生效。

下面的屏幕截图说明了好处。

npm 错误!最初尝试运行脚本时。为 Windows 使用而修改的脚本运行但不显示返回消息。更新 npm config 以使用 bash 后,脚本运行并返回相应的消息。

https://i.stack.imgur.com/IhYmc.png


是的!正是我需要的!谁还想npm install -g more-cr*p
u
user3790180

对于使用 Git Bash 并遇到 npm run <script> 问题的用户,

只需将 npm 设置为使用 Git Bash 运行脚本

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"(根据您的安装更改路径)

然后 npm 将使用 Git Bash 运行脚本,因此像 NODE_ENV= 这样的用法将正常工作。


I
Ishan Kesharwani

这对我有用,因为它很容易解决。我克隆了一个在 WINDOWS 中开发的存储库,但我使用的是 MACOS。

如果您使用的是 Windows,请使用 SET 作为前缀:

"scripts": {
    "dev": "SET NODE_ENV=development && nodemon index.js",
  },

但是,如果您使用的是 MacOS,请删除 SET 关键字并使用:

"scripts": {
    "dev": "NODE_ENV=development && nodemon index.js",
  },

所以简而言之

如果您使用 Windows,请在运行脚本之前使用 SET 前缀,并从 MacOS(也可能是 LINUX)中删除 SET,如上所示。


@Ishan_Kesharwani 空格在 && 之前在 windows 环境中很重要,在此示例中 NODE_ENV 是“开发”,要在开发字符串之后删除空格,dev 中的语句应该与没有空格的 && 分开。
在 mac 中它可以在没有 && 的情况下工作对我有用的是 NODE_ENV=development nodemon app.mjs
j
jmfirestone

这样做肯定会奏效

"scripts": {
    "start": "SET NODE_ENV=production && node server"
}

N
Nimantha
NODE_ENV=development & node [your file name here]

或者

SET NODE_ENV=development & node [your file name here]

C
CertainPerformance
npm install -S cross-env

为我工作


b
barbsan

对于 Windows 打开 git bash 并尝试

NODE_ENV=production node app.js


直接使用时,它确实可以在 Git Bash (mintty) 中使用。但是,当我从 npm <scripts_entry> 运行相同的命令时,我得到一个措辞不同但含义相同的错误:它将 env var name 视为可执行文件。
@AndreyMikhaylov-lolmaus npm run <script> 默认使用 Windows cmd 来运行命令。您可以将其设置为使用 Git Bash。 npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" 然后 npm run 将使用 Git Bash 运行脚本。
P
Post Impatica

如果其他人像我一样来到这里试图找到错误的解决方案:

'env' is not recognized as an internal or external command

我得到这个的原因是我正在将一个角度解决方案从 Mac 开发机器迁移到 Windows 10 桌面。这就是我解决它的方法。

运行 npm install --save-dev cross-env 进入我的 package.json 文件并将所有脚本引用从 env 更改为 cross-env

然后我的命令(例如:npm run start:some_random_environment_var)现在可以在 Windows 10 上正常运行。


对于 Windows 用户来说,仅仅切换到 Bash 有点糊涂,尤其是当其余的都正常工作时。这是一个对我有用的好解决方案。
这应该是公认的答案。 cross-env 无论您使用什么操作系统都可以使用。
H
Husain Dhariwala

对于 Windows,你可以这样做

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},

S
SirPhemmiey

上面的大多数答案对我没有帮助..

帮助我的是NODE_ENV=production&& nodemon app/app.js

注意空间。祝你好运。


这在 Windows 10、Node v14.18.1 中对我有用。
E
ElderSam

在“package.json”文件中设置脚本“test”:

例如:

在 Windows 中; "test": "SET NODE_ENV=test & jest",

在 Linux/Mac 中; "test": "NODE_ENV=test jest",


N
Nimantha

如果您使用“Yarn Packager”,则可以通过以下命令解决此问题:

yarn global add win-node-env

u
user14512746

“set NODE_ENV=production&& nodemon server.js”这个对我有用。


这与这里已经存在的其他 21 个答案有何不同?
H
Hamza Iftikhar

process.env.NODE_ENV 正在添加一个空格 这样做

process.env.NODE_ENV.trim() == 'production'

k
kawcher578

下面是windows的代码

"start": "SET NODE_ENV=development & nodemon app.js",
"prod": "SET NODE_ENV=production & node app.js"

C
Crux_codes

在 Windows 平台上

($env:NODE_ENV="environmentName") -and (node file.js)

杀死终端(Ctrl + C)然后运行文件

节点文件.js


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
Y
Yousuf Ejaz

如果您有机会使用 Powershell 作为终端,请尝试使用 Git-Bash。

NODE_ENV=development node foo.js

y
yash dharia

设置 NODE_ENV=production& nodemon server.js

& 必须加入,因为如果你在生产和 & 之间放置空间,那么 NODE_ENV 将在最后包含空间,就像这样 '生产' 所以只需删除生产和 & 之间的空间并在 & 之后添加空间


T
Tyler2P

您可以使用此语法(使用“cross-env”)->

cross-env NODE_ENV=prod node dist/main