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, и вам нужно скопировать путь, показанный на снимке экрана ниже:
После этого откройте командную строку и снова выполните указанную ниже команду:
Читайте также: