Npx не является внутренней или внешней командой для исполняемой программы или пакетного файла

Обновлено: 04.07.2024

Переменные среды позволяют переключаться между локальной средой разработки, тестирования, промежуточной подготовки, пользовательского приемочного тестирования (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, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Приложение NPM (Node Package Manager) — это менеджер пакетов для языка JavaScript, который позволяет устанавливать библиотеки или модули JavaScript с помощью команды npm install.

NPM поставляется вместе с NodeJS, поэтому каждый раз, когда вы устанавливаете определенную версию NodeJS на свой локальный компьютер, вместе с ней будет также устанавливаться определенная версия NPM.

Вы можете проверить текущую установленную версию NPM с помощью команды npm --version:

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

Эта ошибка возникает, когда операционная система Windows не знает, что делать с командой npm.

Чтобы исправить ошибку, убедитесь, что исполняемый файл Node доступен в вашей переменной PATH.

Примечание. NodeJS должен был добавить расположение исполняемого файла в переменную PATH во время процесса установки, но иногда это может не сработать.

Вы можете добавить новую запись в переменную среды Windows PATH с помощью командной строки следующим образом:

Или вы можете установить переменную PATH с помощью графического интерфейса Windows.

Следующие шаги помогут вам исправить ошибку из интерфейса Windows.

Исправление ошибки npm не распознается в ОС Windows

Сначала перейдите на «Мой компьютер» или «Этот компьютер» для Windows 10. Щелкните правой кнопкой мыши пустое место и откройте окно «Свойства»:

Нажмите «Дополнительные параметры системы» на левой панели окна «Свойства»:

Теперь вы находитесь в окне «Свойства системы». Щелкните Переменные среды. кнопка:

Теперь вы находитесь в окне переменных среды. Выберите переменную пути из таблицы «Пользовательские переменные» или «Системные переменные» и нажмите «Изменить». кнопка:

В конце значений переменных добавьте C:\Program Files\nodejs в качестве новой записи к переменной пути:

Если вы установили NodeJS в другом месте, вам нужно изменить запись на свое собственное местоположение. Не забывайте всегда вводить абсолютный путь от буквы диска до папки программы NodeJS.

После этого нажмите OK и откройте новое окно терминала или командной строки. Если вы вызываете npm из терминала VSCode, вам нужно сначала перезапустить VSCode, прежде чем пытаться снова.

Ошибка npm не распознана должна быть исправлена, и вы сможете проверить это с помощью команды npm --version:

Если вы по-прежнему получаете сообщение об ошибке, попробуйте сначала перезагрузить компьютер. Ошибка должна исчезнуть после перезагрузки.

Теперь вы сможете установить любой пакет NPM на свой локальный компьютер с помощью команды npm install. Отличная работа по исправлению ошибки!

См. также:

Повысьте уровень своих навыков программирования

Я время от времени рассылаю электронные письма с последними руководствами по программированию. Оставьте свой адрес электронной почты в поле ниже, и я буду присылать новые материалы прямо на ваш почтовый ящик!


сообщить об этом объявлении

О нас

Натан Себхастян – инженер-программист, который любит писать технические руководства. Изучайте JavaScript и другие концепции технологий веб-разработки с помощью простых для понимания объяснений, написанных простым английским языком.

Затем создайте пустой файл конфигурации, чтобы редакторы и другие инструменты знали, что вы используете Prettier:

.prettierrc.json` приведет к `"<>" ` в Windows. Приведенная ниже версия работает в cmd.exe, bash, zsh, fish. -->

Затем создайте файл .prettierignore, чтобы Prettier CLI и редакторы знали, какие файлы нельзя форматировать. Вот пример:

Совет! Создайте свой .prettierignore на основе .gitignore и .eslintignore (если он у вас есть).

Еще один совет! Если ваш проект еще не готов к форматированию, скажем, файлов HTML, добавьте *.html .

Теперь отформатируйте все файлы с помощью Prettier:

Что это за npx? npx поставляется с npm и позволяет запускать локально установленные инструменты. Мы опустим часть npx для краткости в остальной части этого файла!

Примечание. Если вы забудете сначала установить Prettier, npx временно загрузит последнюю версию. Это не очень хорошая идея при использовании Prettier, потому что мы меняем форматирование кода в каждом выпуске! Важно, чтобы в package.json была заблокированная версия Prettier. И это также быстрее.

Что делает пряжа в начале? yarn prettier запускает локально установленную версию Prettier. Мы опустим часть пряжи для краткости в оставшейся части этого файла!

красивее --пишите . отлично подходит для форматирования всего, но для большого проекта это может занять некоторое время. Вы можете запустить prettier --write app/ для форматирования определенного каталога или prettier --write app/components/Button.js для форматирования определенного файла. Или используйте glob, например prettier --write "app/**/*.test.js", чтобы отформатировать все тесты в каталоге (о поддерживаемом синтаксисе glob см. fast-glob).

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

--check аналогичен --write , но только проверяет, что файлы уже отформатированы, а не перезаписывает их. prettier --write и prettier --check — наиболее распространенные способы запуска Prettier.

Настройте редактор

Форматирование из командной строки — хороший способ начать работу, но вы получите максимальную отдачу от Prettier, запустив его из редактора либо с помощью сочетания клавиш, либо автоматически при сохранении файла. Когда во время написания кода строка стала такой длинной, что не помещается на вашем экране, просто нажмите клавишу и наблюдайте, как она волшебным образом превращается в несколько строк! Или, когда вы вставляете какой-то код, а отступы перепутались, позвольте Prettier исправить это за вас, не выходя из редактора.

См. раздел Интеграция с редактором, чтобы узнать, как настроить редактор. Если ваш редактор не поддерживает Prettier, вместо этого вы можете запустить Prettier со средством просмотра файлов.

Примечание. Не пропускайте обычную локальную установку! Плагины редактора подберут вашу локальную версию Prettier, убедившись, что вы используете правильную версию в каждом проекте. (Вы бы не хотели, чтобы ваш редактор случайно внес много изменений, потому что он использует более новую версию Prettier, чем ваш проект!)

И возможность запускать Prettier из командной строки по-прежнему является хорошим запасным вариантом, и требуется для настройки CI.

ESLint (и другие линтеры)

Если вы используете ESLint, установите eslint-config-prettier, чтобы ESLint и Prettier хорошо взаимодействовали друг с другом. Он отключает все правила ESLint, которые не нужны или могут конфликтовать с Prettier. Для Stylelint есть похожий конфиг: stylelint-config-prettier

(Дополнительные сведения о форматировании и анализе линтеров см. в разделе Prettier vs. Linters, Интеграция с линтерами для получения более подробной информации о настройке линтеров и Связанные проекты для получения дополнительных возможностей интеграции, если это необходимо.)

Помимо запуска Prettier из командной строки ( prettier --write ), проверки форматирования в CI и запуска Prettier из вашего редактора, многие люди также предпочитают запускать Prettier в качестве перехватчика перед фиксацией. Это гарантирует, что все ваши коммиты отформатированы, и вам не нужно ждать завершения сборки CI.

Например, вы можете сделать следующее, чтобы программа Prettier запускалась перед каждой фиксацией:

Оглавление

Эта команда позволяет запускать произвольную команду из пакета npm (либо установленного локально, либо полученного удаленно) в том же контексте, что и запуск через npm run .

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

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

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

Если параметр -c или --call не указан, то позиционные аргументы используются для создания командной строки. Если параметры --package не указаны, то npm попытается определить имя исполняемого файла из спецификатора пакета, предоставленного в качестве первого позиционного аргумента, в соответствии со следующей эвристикой:

  • Если у пакета есть одна запись в поле bin в package.json или если все записи являются псевдонимами одной и той же команды, будет использоваться эта команда.
  • Если в пакете несколько записей корзины, и одна из них соответствует части поля имени без области действия, будет использована эта команда.
  • Если это не приводит к выбору ровно одного варианта (либо из-за отсутствия записей корзины, либо ни из них не соответствует имени пакета), то npm exec завершает работу с ошибкой.

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

npx и npm exec

При запуске через двоичный файл npx все флаги и параметры должны устанавливаться до любых позиционных аргументов. При запуске через npm exec можно использовать флаг с двойным дефисом -- для подавления синтаксического анализа переключателей и параметров, которые должны быть отправлены в выполняемую команду, npm.

В этом случае npm разрешит имя пакета foo и выполнит следующую команду:

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

Наоборот, из-за логики синтаксического анализа аргументов npm запуск этой команды отличается:

В этом случае npm сначала проанализирует параметр --package, разрешив пакет @npmcli/foo. Затем он выполнит следующую команду в этом контексте:

Двойной дефис рекомендуется использовать, чтобы явным образом сообщить npm о прекращении синтаксического анализа параметров и переключателей командной строки. Таким образом, следующая команда будет эквивалентна приведенной выше команде npx:

Запустите версию tap в локальных зависимостях с предоставленными аргументами:

Запустите команду, отличную от команды, имя которой совпадает с именем пакета, указав параметр --package:

Запустить произвольный сценарий оболочки в контексте текущего проекта:

Совместимость со старыми версиями npx

Двоичный файл npx был переписан в npm v7.0.0, а отдельный пакет npx в то время устарел. npx использует команду npm exec вместо отдельного синтаксического анализатора аргументов и процесса установки с некоторыми возможностями для обеспечения обратной совместимости с аргументами, принятыми в предыдущих версиях.

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