«NODE_ENV» не распознается как внутренняя или внешняя команда, действующая команда или командный файл


208

Я пытаюсь настроить среду для приложения Node.js. но я получаю эту ошибку каждый раз.

«NODE_ENV» не распознается как внутренняя или внешняя команда, действующая команда или пакетный файл.

Что это значит и как я могу решить эту проблему?

Я пользуюсь Windows и тоже попробовал set NODE_ENV=developmentно не повезло.

Ответы:


273

Похоже, ваша ошибка происходит из-за попытки запустить что-то вроде этого (что работает в Linux)

NODE_ENV=development node foo.js

эквивалент в Windows будет

SET NODE_ENV=development
node foo.js

работает в той же командной оболочке. Вы упомянули, что набор NODE_ENV не работает, но не ясно, как и когда вы его выполнили.


спасибо Джим, я использовал его в командной строке и удалил из файла package.json. но я столкнулся с другим после этого. похоже, что узлы-модули не полностью поддерживаются окнами. получил еще одну ошибку с bcrypt и gyp.
Крозеро

здесь не эксперт, но bcrypt показывает поддержку окон, но требует openSSL, не уверен, поможет ли это. Если нет, возможно, захотите опубликовать новый вопрос, поскольку сценарий немного изменился.
Джим О'Нил

5
Хотя это действительно работает, я думаю, что @ Susan-stack дал правильный ответ - кроссплатформенное решение, не меняющее линию для работы на окнах, но ломающее другие ОС.
justabuzz

upsoted ответ Сьюзен - оригинальный ответ предшествовал модулю перекрестного env
Джим О'Нил

252

Я написал для этого модуль: win-node-env .

Это создает , NODE_ENV.cmdкоторый устанавливает NODE_ENVпеременные окружения и порождает дочерний процесс с остальной частью команды и ее аргументов.

Просто установите его (глобально) и запустите команды сценария npm, они автоматически должны заставить их работать.

npm install -g win-node-env

13
Оно работает! И мне не нужно было менять какие-либо команды. Это ответ.
Абхиманью Патания

3
это самый легкий ответ
mrTurkay

1
Как я могу добавить пользовательские переменные в ваш скрипт?
Иван-слоновая кость

1
@ ivan-ivory Первая переменная (т.е. NODE_ENV) должна оставаться неизменной (в противном случае это должен быть совершенно отдельный скрипт). А что касается добавления пользовательских переменных после него (т.е. NODE_ENV = dev SOME_VAR = val), мне придется изменить логику скрипта, чтобы анализировать больше переменных из process.argv. Я думал об этом, но у меня нет времени. Не стесняйтесь сделать запрос на получение.
laggingreflex

1
Не работал для меня Я получаю:> NODE_ENV = разработка node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Род Лима

173

для окон используйте также &между командами. Подобно,

  "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'работу. Во всяком случае, чтобы избежать этого в 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, чтобы установить рабочий режим в рабочий.
Джейсон

90
  1. npm install "cross-env" модуль.
  2. изменить код как cross-env NODE_ENV=development node foo.js. Тогда вы можете запустить как npm run build.

10
Пожалуйста, не забудьте включить cross-envв зависимостиpackage.json
Aminah Nuraini

1
cross-env лучший ответ!
Уильян Лопес

Библиотека находится здесь: github.com/kentcdodds/cross-env - и на этой странице написано, что в devDependencies добавляется cross-dev npm install --save-dev cross-env; это также помогает при ошибке, 'env' is not recognized as an internal or external commandкогда скрипт npm говорит env VARNAME=varvalue && ...(просто удалите env и вставьте cross-env вместо этого). Разработчикам не нужно устанавливать что-то глобально или иметь разные скрипты npm для разных платформ!
Маркус

47

Используйте win-node-env , для этого просто запустите команду ниже на вашем cmdили power shellили git bash:

npm install -g win-node-env

После этого все как в Linux.


27
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

13

Изменение ваших сценариев под Windows - это королевская боль. Попытка выяснить соответствующие переводы для Windows и поддержка двух наборов сценариев - это не способ жить своей жизнью.

Настроить npm для использования bash в Windows намного проще, и ваши скрипты будут работать как есть.

Просто беги npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Убедитесь, что путь к исполняемому файлу bash правильный для вашей машины. Вероятно, вам потребуется запустить новый экземпляр терминала, чтобы изменения вступили в силу.

Снимок экрана ниже иллюстрирует преимущества.

  1. нпм ERR! при попытке запустить скрипт изначально.
  2. Скрипт, модифицированный для использования Windows, запускается, но не показывает ответное сообщение.
  3. После обновления конфигурации npm для использования 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

Для окон откройте git bash и попробуйте

NODE_ENV=production node app.js


1
Он работает в Git Bash (Mintty) при непосредственном использовании. Но когда я запускаю ту же команду из npm <scripts_entry>, я получаю сообщение об ошибке с другим выражением, но эквивалентным значением: он рассматривает env var name как исполняемый файл.
Андрей Михайлов - lolmaus

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

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

Для окон вы можете сделать это как

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.