Node env не является внутренней или внешней управляющей программой или пакетным файлом

Обновлено: 20.11.2024

Запускать сценарии npm в Windows, которые устанавливают (общие) переменные среды.

Проблема

Если вы работаете в Windows, вы, вероятно, столкнулись с такой ошибкой:

который исходит из скрипта npm в вашем проекте, настроенного следующим образом:

Установка NODE_ENV=production перед командой babel не работает в Windows.

Вы можете использовать cross-env, но это требует изменения ваших сценариев npm и подключения пользователей Mac/*nix.

Решение

win-node-env создает исполняемые файлы, такие как NODE_ENV.cmd, которые устанавливают переменную среды NODE_ENV и выполняют остальную часть команды.

Установить

Вы можете установить его глобально:

Или вы можете включить его в дополнительные зависимости вашего проекта или библиотеки:

Он не будет установлен ни в какой другой ОС, кроме Windows.

Использование

Просто установите его и запустите команды скрипта npm, они автоматически заработают.

Помимо NODE_ENV, есть еще несколько часто используемых переменных env:

Вы также можете использовать несколько переменных env, если первая является одной из перечисленных выше

Бонус

Теперь он также поддерживает ; персонаж!

Несмотря на любые && , || , и & может сломать его.

Совет: добавьте еще больше пользовательских переменных

Если вы хотите добавить еще больше пользовательских переменных (которые вы можете указать первой), вы можете сделать это следующим образом.

Предположим, вы хотите добавить MY_VAR , поместите файл с именем MY_VAR.cmd туда, где он будет доступен из вашей командной строки. (когда вы вводите команду в командной строке, скажем, MY_VAR , она ищет файл с именем MY_VAR.cmd в списке предопределенных путей. Этот список предопределенных путей находится в переменной среды PATH . Вы можете отредактируйте его, указав путь, содержащий файл MY_VAR.cmd)

Убедитесь, что этот модуль установлен глобально.

Затем просто поместите в этот файл следующий код:

MY_VAR.cmd

NODE_PATH указывает, где искать.

%APPDATA%\npm\node_modules обычно находится там, где живут ваши глобально установленные модули

%~n0 заменяется на имя текущего файла (без расширения), т. е. 'MY_VAR'

X — это фиктивный аргумент, который просто необходим по какой-то причине

%* расширяет все аргументы, переданные пакетному файлу, и передает их этому модулю

> @dev C:\\xampp\\htdocs\\test\\test\n> cross-env NODE_ENV=development node_mo\ndules\/webpack\/bin\/webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup\/webpack.config.js\n \n'cross-env' не распознается как внутренняя или внешняя команда,\nнеработоспособная программа или пакетный файл.\n\n. \n\nnpm ОШИБКА! узел v7.5.0\nnpm ОШИБКА! npm v4.1.2\nnpm ОШИБКА! код ELIFECYCLE\nnpm ОШИБКА! @ dev: `cross-env NODE_ENV=разработка node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup\/webpack.config.js `\nnpm ОШИБКА! Статус выхода 1\nnpm ERR!\nnpm ERR! Ошибка в сценарии @dev 'cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup \/webpack. config.js'.\n\n \n

вы запускали npm install в корне вашего проекта? если не запустить\n

> @dev C:\\xampp\\htdocs\\test\\npm install\n \n

после завершения запуска \n

У кого-то еще есть эта проблема? как и я\nЯ использую последнюю версию узла - 8.1.3. \n

0 информации, это сработало, если оно заканчивается на ok\n1 подробный cli [ 'C:\\\\Program Files\\\\nodejs\\\\node.exe',\n1 подробный cli 'C:\\\ \Program Files\\\\nodejs\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js',\n1 подробный cli 'запуск',\n1 подробный cli 'разработка' ] \n2 информация с использованием npm@5.0.3\n3 информация с использованием node@v8.1.3\n4 подробный сценарий запуска ['предварительная разработка', 'разработка', 'после разработки']\n5 информационный жизненный цикл @~predevelopment: @\n6 глупый жизненный цикл @~predevelopment: нет сценария для предварительной разработки, продолжается\n7 информационный жизненный цикл @~development: @\n8 подробный жизненный цикл @~development: unsafe-perm в жизненном цикле true\n9 подробный жизненный цикл @~development: PATH: C:\\Program Files\ \nodejs\\node_modules\\npm\\bin\\node-gyp-bin;C:\\wamp\\www\\laravel-blog\\node_modules\\.bin;C:\\Program Files\\nodejs\ \node_modules\\npm\\bin\\node-gyp-bin;C:\\wamp\\www\\laravel-blog\\node_modules\\.bin;C:\\ProgramData\\Oracle\\Java\\ javapath;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\ v1.0\\;C:\\Program Files (x86)\\ATI Technologies\\ATI.ACE\\Core-Static;C:\\Program Files (x86)\\Skype\\Phone\\;;C :\\wamp\\bin\\php\\php5.6.25;C:\\ProgramData\\ComposerSetup\\bin;C:\\Program Files\\nodejs\\;C:\\Users\\Djusa\\ AppData\\Roaming\\Composer\\vendor\\bin;C:\\Users\\Djusa\\AppData\\Roaming\\npm\n10 подробный жизненный цикл @~development: CWD: C:\\wamp\\www\ \laravel-blog\n11 глупый жизненный цикл @~development: Аргументы: [ '\/d \/s \/c',\n11 глупый жизненный цикл 'cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup\/webpack.config.js' ]\n12 глупый жизненный цикл @~development: возвращено: code: 1 signal: null\n13 info жизненный цикл @~development: не удалось выполнить скрипт разработки\n14 подробный стек Ошибка: @development: `cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config= node_modules\/laravel-mix\/setup\/webpack.config.js`\n14 подробный стек Статус выхода 1\n14 подробный стек в EventEmitter.<anonymous> (C:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\lifecycle.js:283:16)\n14 подробный стек в emitTwo (events.js:125:13)\n14 подробный стек в EventEmitter.emit (events.js:213:7)\n14 подробный стек в ChildProcess.<anonymous> (C:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\spawn.js:40:14)\n14 подробный стек в emitTwo (events.js:125:13)\n14 подробный стек в ChildProcess.emit (events.js:213:7)\nподробный стек 14 в mayClose (внутренний\/child_process.js:897:16)\nподробный стек 14 в Process.ChildProcess._handle.onexit (внутренний\/child_process. js:208:5)\n15 подробный pkgid @\n16 подробный cwd C:\\wamp\\www\\laravel-blog\n17 подробный Windows_NT 6.1.7601\n18 подробный argv "C:\\\\Program Files\ \\\nodejs\\\\node.exe" "C:\\\\Program Files\\\\nodejs\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js" «беги»; "разработка"\n19 подробный узел v8.1.3\n20 подробный npm v5.0.3\n21 код ошибки ELIFECYCLE\n22 ошибка errno 1\n23 ошибка @ разработка: `cross-env NODE_ENV=development node_modules\/webpack\/bin\/ webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup\/webpack.config.js`\n23 ошибка Статус выхода 1\n24 ошибка Ошибка при выполнении сценария @ разработки.\n24 ошибка Вероятно, это не проблема с npm. Скорее всего, выше приведен дополнительный вывод журнала.\n25 подробный выход [ 1, true ]\n \n","bodyInMarkdown":"Есть ли у кого-то еще эта проблема? как и я\r\nЯ использую последнюю версию узла - 8.1.3.\r\n\r\n```\r\n0 информация, которая работала, если она заканчивается на ok\r\n1 подробный cli [ ' C:\\\\Program Files\\\\nodejs\\\\node.exe',\r\n1 verbose cli 'C:\\\\Program Files\\\\nodejs\\\\node_modules\\\ \npm\\\\bin\\\\npm-cli.js',\r\n1 подробный cli 'запуск',\r\n1 подробный cli 'разработка']\r\n2 информация с использованием npm@5.0.3\ r\n3 информация с использованием node@v8.1.3\r\n4 подробный сценарий запуска ['предварительная разработка', 'разработка', 'после разработки']\r\n5 жизненный цикл информации @~predevelopment: @\r\n6 глупый жизненный цикл @~ предварительная разработка: нет сценария для предварительной разработки, продолжается\r\n7 информационный жизненный цикл @~development: @\r\n8 подробный жизненный цикл @~development: unsafe-perm в жизненном цикле true\r\n9 подробный жизненный цикл @~development: PATH: C:\ \Program Files\\nodejs\\node_modules\\npm\\bin\\node-gyp-bin;C:\\wamp\\www\\laravel-blog\\node_modules\\.bin;C:\\Program Files \\nodejs\\node_modules\\npm\\bin\\node-gyp-bin;C:\\wamp\\www\\laravel-blog\\node_modules\\.bin;C:\\ProgramData\\Oracle\ \Java\\javapath;C:\\Windows \\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86) \\ATI Technologies\\ATI.ACE\\Core-Static;C:\\Program Files (x86)\\Skype\\Phone\\;;C:\\wamp\\bin\\php\\php5.6.25 ;C:\\ProgramData\\ComposerSetup\\bin;C:\\Program Files\\nodejs\\;C:\\Users\\Djusa\\AppData\\Roaming\\Composer\\vendor\\bin;C :\\Users\\Djusa\\AppData\\Roaming\\npm\r\n10 подробный жизненный цикл @~development: CWD: C:\\wamp\\www\\laravel-blog\r\n11 глупый жизненный цикл @~development : Args: [ '\/d \/s \/c',\r\n11 глупый жизненный цикл 'cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules - -config=node_modules\/laravel-mix\/setup\/webpack.config.js' ]\r\n12 глупый жизненный цикл @~development: возвращено: code: 1 signal: null\r\n13 info lifecycle @~development: Failed для сценария разработки exec\r\n14 подробный стек Ошибка: @ development: `cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config=no de_modules\/laravel-mix\/setup\/webpack.config.js`\r\n14 подробный стек Статус выхода 1\r\n14 подробный стек в EventEmitter. (C:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\lifecycle.js:283:16)\r\n14 подробный стек в emitTwo (events.js:125:13)\ r\n14 подробный стек в EventEmitter.emit (events.js:213:7)\r\n14 подробный стек в ChildProcess. (C:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\spawn.js:40:14)\r\n14 подробный стек в emitTwo (events.js:125:13)\ r\nПодробный стек 14 в ChildProcess.emit (events.js:213:7)\r\nПодробный стек 14 в mayClose (внутренний\/child_process.js:897:16)\r\nПодробный стек 14 в Process.ChildProcess._handle .onexit (internal\/child_process.js:208:5)\r\n15 подробный pkgid @\r\n16 подробный cwd C:\\wamp\\www\\laravel-blog\r\n17 подробный Windows_NT 6.1.7601\ r\n18 подробный аргумент \"C:\\\\Program Files\\\\nodejs\\\\node.exe\" \"C:\\\\Program Files\\\\nodejs\\\\node_modules\ \\\npm\\\\bin\\\\npm-cli.js\" \"запустить\" \"разработка\"\r\n19 подробный узел v8.1.3\r\n20 подробный npm v5.0.3\r\n21 код ошибки ELIFECYCLE\r\n22 ошибка errno 1\r\n23 ошибка @ разработка: `cross-env NODE_ENV=development node_modules\/webpack\/bin\/webpack.js --progress --hide-modules --config=node_modules\/laravel-mix\/setup\/webpack.config.js`\r\n23 ошибка Статус выхода 1\r\n24 ошибка Сбой при выполнении скрипта разработки @.\r\n24 ошибка Вероятно, это не так проблема с нпм. Скорее всего, выше приведен дополнительный вывод журнала.\r\n25 подробный выход [ 1, true ]\r\n```","ответы":[],"пользователь":,"достижения":[],"сообщено" :null,"персонал":false,"подписка":false,"профиль":,"dateSegments":,"настройки":,"ссылки":>,"лайки":[],"created_at":"2017- 07-07T06:38:36.000000Z","ссылки":,"best_answer":false,"dateSegments":>],"links":,"meta":<"current_page":1,"from":1, "last_page":1,"links":[<"url":null,"label":"« Предыдущий","активный":false>,,],"path":"https:\/\/laracasts.com\/discuss\/channels\/elixir\/mix-cross-env-is-not-recognized- как-внутренняя-или-внешняя-командная-оперативная-программа-или-пакетный-файл","per_page":30,"to":3,"всего":3,"originalPosterId":47867,"bestReplyId" :null,"replyIdsInOrder":[329475,329483,351361],"participantsCount":2>>,"leaderboardIds":[6939,8459,6962,26543,43963,31132,1227,2758,4375,9687]," bestAnswer":null,"pageBgColor":"белый","рекомендуется":[

GraphQL часто рассматривается как преемник REST API. Он предоставляет мощный язык запросов и позволяет запрашивать именно ту информацию, которую вы хотите, не больше и не меньше.

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

Вместо того, чтобы передавать переменные в сценарии по отдельности, env-cmd позволяет группировать переменные в файл среды ( .env ) и передавать их в сценарий.

В этой статье вы установите и будете использовать env-cmd в примере проекта.

Предпосылки

Для выполнения этого руководства вам потребуется:

  • Node.js установлен локально, что можно сделать, следуя инструкциям по установке Node.js и созданию локальной среды разработки.
  • Есть необязательный раздел о добавлении файлов в .gitignore . Для этого может потребоваться установка и настройка git, если вы хотите продолжить.
  • Знакомство с окном терминала и редактором кода также будет полезным.

Примечание. Это руководство было обновлено для использования команд env-cmd после версии 9.0.0.

Это руководство было проверено с помощью Node v15.14.0, npm v7.10.0 и env-cmd v10.0.1.

Шаг 1. Настройка проекта

В этом руководстве предполагается, что у вас есть новый проект. Создайте новый каталог:

Затем перейдите в каталог:

Обычно считается плохой практикой передавать файлы среды в систему управления версиями. Если репозиторий разветвлен или открыт для общего доступа, учетные данные будут доступны другим, поскольку они навсегда останутся в истории проекта.

Рекомендуется добавить файл в ваш .gitignore .

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

Инициализировать новый проект git:

Создайте файл .gitignore и добавьте шаблоны, чтобы исключить файл среды:

Для этого руководства вы можете исключить .env , .env.js , .env.json , .env-cmdrc .

Затем создайте файл .env для проекта.

Откройте файл в редакторе кода и добавьте следующую строку кода:

Затем создайте новый файл log.js:

Это приведет к регистрации ранее определенных переменных в консоли. И он также распечатает значение NODE_ENV.

Теперь ваш пример подготовлен для использования файлов среды с env-cmd .

Шаг 2. Использование env-cmd

Современные npm и yarn могут запускать env-cmd без создания зависимости.

В противном случае вы можете установить пакет как зависимость или devDependency:

Пакет env-cmd устанавливает исполняемый скрипт с именем env-cmd, который можно вызывать перед вашими скриптами, чтобы легко загружать переменные среды из внешнего файла.

В зависимости от ваших настроек вы можете ссылаться на env-cmd несколькими способами.

Возможно, наиболее совместимым между менеджерами пакетов является добавление пользовательского сценария в файл package.json:

Например, с помощью npm вы сможете запустить этот пользовательский скрипт с помощью следующей команды:

Если вы предпочитаете использовать env-cmd непосредственно из командной строки, вы можете вызвать его непосредственно из node_modules:

В дальнейшем в этом руководстве будет использоваться подход npx, но все подходы работают одинаково.

Теперь используйте один из подходов в своем терминале.

Независимо от того, как вы решите запустить скрипт, env-cmd загрузит файл .env, а скрипт ведения журнала сообщит о переменных.

Возможно, вы заметили, что значение NODE_ENV не определено. Это связано с тем, что NODE_ENV не был определен в файле .env.

Можно передать NODE_ENV перед вызовом env-cmd .

Например, вот команда для npx :

Запустите команду еще раз с определенным NODE_ENV:

К этому моменту вы научились использовать env-cmd с файлом .env.

Шаг 3. Использование разных форматов файлов

env-cmd по умолчанию ожидает файл .env в корневом каталоге проекта. Однако вы можете изменить тип файла и путь с помощью параметра --file ( -f ).

Независимо от того, как вы на него ссылаетесь, у вас есть широкий выбор форматов файлов, доступных для хранения переменных среды.

Файл JSON

Вот пример файла .env.json:

А вот пример использования этого файла с env-cmd :

Теперь вы узнали, как использовать файл среды JSON.

JavaScript

Вот пример файла .env.js:

А вот пример использования этого файла с env-cmd :

Теперь вы узнали, как использовать файл среды JavaScript.

Файл RC

Формат файла rc уникален тем, что позволяет определить несколько сред в одном файле JSON и ссылаться на среду по имени, а не по файлу.

Файл runcom также отличается тем, что он должен называться .env-cmdrc и находиться в корне вашего проекта.

Вот пример файла .env-cmdrc со средами, определенными для разработки, подготовки и производства:

Для использования значений .env-cmdrc потребуется параметр --environments ( -e ).

Тогда вы можете сослаться на одну среду:

Вы даже можете сослаться на несколько сред, что объединит все переменные среды, причем последняя среда будет иметь приоритет, если есть перекрывающиеся переменные:

При указании всех трех наших сред будут установлены все остальные значенияVar, а остальные переменные будут получены из последней указанной среды, рабочей .

Шаг 4. Использование изящных откатов с параметром --fallback

В ситуациях, когда файл пользовательской среды отсутствует:

env-cmd выдаст ошибку:

В ситуациях, когда возникает непредвиденная проблема с пользовательским путем к файлу env, env-cmd может попытаться загрузить файл .env из корня вашего проекта. Для этого передайте флаг --fallback:

Теперь, если есть действительный файл .env, к которому можно вернуться, эта команда не будет отображать никаких ошибок.

Шаг 5. Использование существующих значений среды с параметром --no-override

В некоторых ситуациях может потребоваться сохранить все или некоторые переменные, уже установленные в среде.

Чтобы учитывать существующие переменные среды вместо использования значений в файле .env, передайте env-cmd флаг --no-override:

Это приведет к следующему результату:

Обратите внимание, что значение существа было установлено на кальмара вместо акулы, которая была определена в файле .env.

Заключение

В этой статье вы установили и использовали env-cmd в примере проекта.

Использование файлов среды может помочь вам переключаться между средами разработки и производства.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Node.js – это мощная среда выполнения, основанная на движке Google v8, который отвечает за создание быстрых и масштабируемых веб-приложений, таких как потоковое вещание, чат-приложения, браузерные игры, приложения командной строки и многое другое. Однако, как программист, вы не можете избежать ошибок. Одна из таких ошибок, основанная на Node.js, показана на снимке экрана ниже:

Вы видите, что узел не распознан как внутренняя или внешняя ошибка команды.

Причины ошибки

  • Node.js не установлен в вашей системе
  • Неправильно заданы переменные среды

Установите Node.js

Чтобы правильно установить Node.js, откройте свой любимый браузер и посетите официальный веб-сайт Node.js. Щелкните установщик Windows, показанный на снимке экрана ниже.

Начнется загрузка установщика Node.js. Когда загрузка завершится, перейдите в папку загрузок и щелкните установщик Node.js. Продолжайте нажимать кнопку «Далее», пока ваш Node.js не будет успешно установлен.

Чтобы проверить установку, откройте cmd в своей системе и выполните следующую команду:

Установка переменных среды

Иногда даже после успешной установки Node.js ошибка продолжает появляться; это потому, что переменная среды не установлена ​​​​должным образом. Чтобы установить переменную среды, просто найдите изменить системную среду в строке поиска в нижнем левом углу Windows 10.

Нажмите на переменные системной среды редактирования, откроется окно, в котором вам нужно нажать на переменные среды.

Откроется окно "Переменные среды", в котором необходимо выбрать или дважды щелкнуть по переменной "Путь".

Теперь вставьте полный путь, по которому был установлен Node.js. Нажмите «ОК» и перезагрузите систему.

Вы можете найти путь к Node.js, выполнив поиск node в строке поиска, расположенной в левом нижнем углу Windows 10.

Вы увидите приложение узла, щелкните правой кнопкой мыши приложение узла, а затем выберите расположение открытого файла.

Откроется расположение файла Node.js, и вам нужно скопировать путь, показанный на снимке экрана ниже:

После этого откройте командную строку и снова выполните указанную ниже команду:

Читайте также: