339

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

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

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

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

4

23 回答 23

449

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

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

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

npm install -g win-node-env
于 2016-12-05T05:29:41.600 回答
374

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

NODE_ENV=development node foo.js

Windows中的等价物是

SET NODE_ENV=development
node foo.js

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

于 2012-08-13T04:27:47.760 回答
236

对于 windows&在命令之间也可以使用。像,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }
于 2015-11-17T11:11:02.870 回答
160
  1. npm install --save-dev "cross-env"模块。
  2. 将代码修改为cross-env NODE_ENV=development node foo.js. 然后就可以运行like了npm run build
于 2016-05-10T06:56:15.850 回答
64

使用win-node-envcmd ,要使用它,只需在or power shellor上运行以下命令git bash

npm install -g win-node-env

之后一切都像Linux。

于 2018-02-24T19:00:15.470 回答
38

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

npm install -g win-node-env

一切正常

于 2020-10-30T12:40:47.840 回答
37
set NODE_ENV=production & nodemon app/app.js

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

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

如这里的评论中所述,请改用:

NODE_ENV=production&& nodemon app/app.js
于 2017-07-27T08:30:50.120 回答
30

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

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

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

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

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

让 npm 脚本在 Windows 中按原样运行

于 2019-05-25T15:36:13.523 回答
13

对于那些使用 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=将正常工作。

于 2019-04-11T19:09:04.093 回答
7

这样做肯定会奏效

"scripts": {
    "start": "SET NODE_ENV=production && node server"
}
于 2020-07-29T16:58:55.190 回答
5

这对我有用,因为它很容易解决。我克隆了一个在 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,如上所示。

于 2021-07-19T06:53:43.943 回答
4
npm install -S cross-env

为我工作

于 2018-08-06T02:55:57.403 回答
4

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

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

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

  1. npm install --save-dev cross-env

  2. 进入我的 package.json 文件并将所有脚本引用从 更改env <whatever>cross-env <whatever>

然后我的命令就像:npm run start:some_random_environment_var现在在 Windows 10 上运行良好。

于 2019-01-09T18:00:06.210 回答
4

对于 Windows,你可以这样做

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
于 2020-05-12T03:02:31.967 回答
3

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

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

注意空间。祝你好运。

于 2018-09-13T22:10:27.550 回答
3

对于 Windows 打开 git bash并尝试

NODE_ENV=production node app.js

于 2018-11-27T12:07:30.737 回答
3

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

例如:

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

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

于 2021-03-09T12:28:39.687 回答
3

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

yarn global add win-node-env
于 2021-12-31T07:53:09.797 回答
2

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

于 2022-01-13T14:33:21.647 回答
1

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

process.env.NODE_ENV.trim() == 'production'
于 2020-01-16T10:53:46.883 回答
1
NODE_ENV=development & node [your file name here]

或者

SET NODE_ENV=development & node [your file name here]
于 2021-07-13T00:41:25.523 回答
0

在 Windows 平台上

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

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

节点文件.js

于 2022-02-05T19:00:35.010 回答
-2

在 Windows 机器上 npm install -g win-node-env

于 2021-07-03T10:52:02.597 回答