无法将“ NODE_ENV”识别为内部或外部命令,可操作命令或批处理文件


207

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

无法将“ NODE_ENV”识别为内部或外部命令,可操作命令或批处理文件。

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

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

Answers:


271

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

NODE_ENV=development node foo.js

Windows中的等效项是

SET NODE_ENV=development
node foo.js

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


谢谢吉姆,我在命令行中使用了它,并将其从package.json文件中删除。但是之后我又遇到了另一个 Windows似乎不完全支持节点模块。在使用bcrypt和gyp时遇到了另一个错误。
krozero

不是这里的专家,但是bcrypt显示了对Windows的支持,但确实需要openSSL,不确定是否有帮助。如果不是这样,由于方案已稍作更改,可能想发布一个新问题。
吉姆·奥尼尔

5
虽然这确实有效,但我认为@ Susan-stack提供了正确的答案-跨平台解决方案,并且不更改行以在Windows上工作,但破坏了其他操作系统。
justabuzz

支持Susan的答案-原始答案早于跨环境模块
Jim O'Neil

250

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

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

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

npm install -g win-node-env

13
有用!而且我不必更改任何命令。这就是答案。
Abhimanyu Pathania

3
这是最简单的请求
mrTurkay '17

1
如何为您的脚本添加自定义变量?
ivan-ivory

1
@ ivan-ivory第一个变量(即NODE_ENV)必须保持不变(否则,它必须是一个完全独立的脚本)。至于在其后添加自定义变量(即NODE_ENV = dev SOME_VAR = val),我将必须修改脚本的逻辑以解析来自process.argv的更多变量。我一直在想,但没有时间。随时提出请求。
laggingreflex

1
没为我工作。我得到:> NODE_ENV = development node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js无法将“ node_modules”识别为内部或外部命令,可运行程序或批处理文件。
Rod Lima

173

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

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

7
该命令有效,但是的值NODE_ENV将为'development'('t'和'&'之间的空白将包含在中NODE_ENV
roroinpho21

1
正是@ roroinpho21所说的。现在,我必须.trim()稍后再进行有价值的process.env.NODE_ENV == 'production'工作。无论如何要避免这种情况?
弗里昂

人们谁也不能使它发挥作用, "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文件周围的内容。
SerhatTürkman,

如果您尝试运行npm start来将生产模式设置为生产,那么这正是您想要的。
杰森

90
  1. npm install "cross-env" 模块。
  2. 将代码修改为cross-env NODE_ENV=development node foo.js。然后就可以运行like了npm run build

10
请不要忘记cross-env将依赖项包括在内package.json
Aminah Nuraini

1
跨环境的最佳答案!
Williaan Lopes

该库位于:github.com/kentcdodds/cross-env-该页面说在devDependencies中包括cross-dev npm install --save-dev cross-env;这也有助于解决'env' is not recognized as an internal or external commandnpm脚本所说的错误env VARNAME=varvalue && ...(只需删除env并插入cross-env即可)。开发人员无需在全球范围内安装某些东西,也无需为不同平台使用不同的npm脚本!
Marcus

47

使用win-node-env,要使用它,只需在您的cmdor power shell或以下命令下运行git bash

npm install -g win-node-env

之后,一切都像Linux。


2
我喜欢这种方法更好,因为它避免了修改代码,使其工作在Windows上
米奇普里

1
是。我认为这是最合适的答案。我喜欢这种方法。
阳光苏丹”

亲爱的@JeffreyNicholsonCarré,感谢你可爱的评论,希望它可以帮助你❤️🌹
AmerllicA

26
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

NODE_ENV="production"
TheFrost

我不记得了,但是请不要留下未解决的问题:我看到我赞成Susan-stack给出的答案。我真的很抱歉。
TheFrost '18年

我在webpack配置中添加了trim():插件:[new webpack.DefinePlugin({“ process.env”:{NODE_ENV:JSON.stringify(process.env.NODE_ENV.trim())}}))},),
李·康斯托克

单打&和双打有什么区别&&?两者似乎都对我有用。
程序员

13

更改脚本以适应Windows是一种痛苦。试图找出合适的Windows翻译版本并维护2套脚本是无法实现的。

将npm配置为在Windows上使用bash更加容易,并且脚本将按原样运行。

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

下面的屏幕快照说明了好处。

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

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


7

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



2

对于Windows,请 打开git bash并尝试

NODE_ENV=production node app.js


1
直接使用时,它确实可以在Git Bash(mintty)中工作。但是,当我从中运行相同的命令时npm <scripts_entry>,我得到一个错误,其措辞不同但含义相同:它将env var name视为可执行文件。
安德烈·米哈伊洛夫

2
@ 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运行脚本。
user3790180 '19

1

那里的大多数答案对我没有帮助。

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

注意空间。祝好运。


1

如果有人像我一样来到这里,试图为错误找到解决方案:

'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上运行良好。


对于Windows用户而言,仅切换到Bash有点困难,尤其是在其余功能正常的情况下。这是一个对我有用的好解决方案。
FuZZbaLL


0

对于Windows,您可以像

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.