"NODE_ENV" не розпізнається як внутрішня чи зовнішня команда, операбельна команда або пакетний файл


208

Я намагаюся налаштувати середовище для програми Node.js. але я щоразу отримую цю помилку

"NODE_ENV" не розпізнається як внутрішня чи зовнішня команда, операбельна команда чи пакетний файл.

Що це означає і як можна вирішити цю проблему?

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

Відповіді:


272

Здається, що помилка виникла від спроби запустити щось подібне (що працює в 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, не впевнений, чи допомагає це. Якщо ні, можливо, захочете написати нове запитання, оскільки сценарій трохи змінився.
Jim O'Neil

5
Хоча це справді працює, я думаю, що @ Susan-stack дав правильну відповідь - крос-платформне рішення і не змінював лінію для роботи над Windows, а зламав інші ОС.
justabuzz

схвалила відповідь Сьюзен - оригінальна відповідь передувала модулю крос-енв
Jim O'Neil

250

Я написав для цього модуль: 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 / index.js 'node_modules' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма або пакетний файл.
Род Ліма

173

для вікон також використовується &між командою. Подібно до,

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

7
Команда працює, але значенням NODE_ENVбуде "розвиток" (пробіл між '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.
Серхат Тюркман

Це робить саме те, що ви хочете, якщо ви намагаєтеся запустити 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
Аміна Нурайні

1
крос-енд найкраща відповідь!
Вілліан Лопес

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

47

Використовуйте win-node-env. Для його використання просто запустіть нижче команди на вашому cmdабо power shellабо git bash:

npm install -g win-node-env

Після цього все схоже на Linux.


2
Мені подобається цей підхід краще, оскільки він уникає необхідності вносити зміни до коду, щоб він працював на windows
Міккі Пурі

1
так. Я думаю, що це найбільш відповідна відповідь. Мені подобається такий підхід.
Сонячний султан

Шановний @ JeffreyNicholsonCarré, дякую за прекрасний коментар, сподіваюсь, що це допоможе тобі ❤️🌹
AmerllicA

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

Про що NODE_ENV="production"?
TheFrost

Я не пам’ятаю, але не залишаю питання без відповіді: я бачу, що я схвалив відповідь, яку дала Сьюзен-стек. Мені дуже шкода.
TheFrost

Я додав trim () у конфігурацію webpack: `плагіни: [новий webpack.DefinePlugin ({" process.env ": {NODE_ENV: JSON.stringify (process.env.NODE_ENV.trim ())}})],`
Лі Комсток

Яка різниця між одинарним &та подвійним &&? Обидва, здається, працюють на мене.
theprogrammer

13

Зміна сценаріїв для розміщення Windows - це королівський біль. Намагаючись розібратися у відповідних перекладах Windows та підтриманні 2 наборів сценаріїв - це спосіб не прожити своє життя.

Набагато простіше налаштувати npm для використання bash для Windows, і ваші сценарії працюватимуть так, як є.

Просто бігайте 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 (м'ятний) при безпосередньому використанні. Але коли я запускаю ту саму команду npm <scripts_entry>, я отримую помилку з різним фразуванням, але еквівалентним значенням: вона розглядає ім'я env var як виконуваний файл.
Андрій Михайлов - 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 для запуску скриптів.
користувач3790180

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.