Учебное пособие по началу работы с npx
Если вы только начинаете изучать JavaScript или Node.js, вы, вероятно, уже сталкивались
npmс установкой различных инструментов и библиотек. Иногда хочется просто быстро запустить инструмент и посмотреть, как он работает, не устанавливая его глобально, верно?Есть и другая ситуация: разным проектам нужны разные версии инструментов командной строки, и глобальная установка всегда вызывает конфликты?
npxЭто мощный инструмент, созданный для решения этих проблем.
npxЭто инструмент командной строки, представленный в npm 5.2.0, который позволяет запускать пакеты npm без глобальной установки.
Проще говоря,npx — это удобный инструмент для запуска пакетов Node.js,и его основная философия дизайна:Использовать временно, без постоянной установки。
Яркая метафора
Представьте свою домашнюю коробку с инструментами:
- npm... это как вашменеджер склада инструментов. Когда вы
npm install -g some-tool, это равносильно тому, что вы говорите менеджеру: купи этот инструмент и положи его навсегда в наш гараж (глобальную среду). - npx... это какслужба выполнения поручений по требованию. Когда вы
npx some-tool, это равносильно тому, что вы говорите посыльному: найди мнеsome-toolчтобы использовать, а после использования верни, не клади его в мой дом.
Использованиеnpx, вы можете запустить любой пакет из реестра npm, не устанавливая его сначала на свой компьютер.
| Традиционные болевые точки | Решение npx |
|---|---|
| Нужно устанавливать глобально | Запуск напрямую |
| Конфликты версий | Использовать указанную версию каждый раз |
| Загрязнение окружения | Очистка после использования |
| Локальные команды трудно найти | Автоматический поиск |
Зачем использовать npx?
1. Решение проблемы глобального загрязнения пакетами и конфликтов версий
ВnpxДо появления npx, если вы хотели использовать такие инструменты командной строки, какcreate-react-app、vue-cliинструменты для создания каркаса проекта, вам приходилось сначала устанавливать их глобально:npm install -g create-react-app。
Это порождает две проблемы:
- Загрязнение глобальной среды: установленный пакет будет занимать ваше дисковое пространство долгое время, даже если вы не использовали его некоторое время.
- Конфликты версий: если вы разрабатываете два проекта, одному требуется
create-react-app@3, а другому требуетсяcreate-react-app@5, глобальная установка может хранить только одну версию, что приведёт к тому, что один из проектов не сможет нормально работать.
npxОн позволяет напрямую указать версию для запуска и не остаётся после использования, идеально избегая этих проблем.
2. Легко запускайте пакеты, установленные локально в проекте
В каталоге проекта выnpm install some-cli-toolустановили пакеты (появятся вnode_modules/.bin/каталоге), обычно их можно вызвать только через сложные пути или скрипты npm. Аnpxон может разумно отдавать приоритет использованию локальной версии в текущем проекте, делая вызов очень простым.
3. Безопасно и удобно пробуйте новые инструменты
Хотите протестировать недавно выпущенный инструмент командной строки? Просто используйтеnpx new-cool-toolчтобы попробовать! Если он не подойдёт, он не оставит никакого следа на вашем компьютере.
Как работает npx
Когда вы выполняетеnpx <command>, он найдёт и выполнит команду согласно следующей логике:

Этот процесс полностью прозрачен для пользователя; вам просто нужно наслаждаться удобством, которое он приносит.
Как использовать npx?
Подготовка окружения
Убедитесь, что ваша версия Node.js >= 5.2.0. Вы можете проверить с помощью следующей команды:
node --version npm --version # 如果 npm 版本 >= 5.2.0,npx 就已经可用了 npx --version
Базовый синтаксис
npx [选项] <命令>[@版本] [命令的参数...]
Описание распространённых параметров опций
| Опция | Полное название | Описание |
|---|---|---|
--no-install |
Заставить npx использовать только локально существующие пакеты. Если пакет недоступен локально, сообщить об ошибке и не скачивать. | |
--ignore-existing |
Игнорировать локально существующие пакеты и принудительно скачать последнюю версию из удалённого источника. | |
-p, --package <包名> |
Указать пакеты для установки. Это очень полезно, когда нужно использовать несколько пакетов одновременно. | |
-c <命令字符串> |
При использовании-pПри указании нескольких пакетов используйте-cчтобы указать npx конкретную команду для выполнения. |
|
--yes |
Автоматически отвечать «да», когда известно, что будет вызван запрос (например, create-react-app спрашивает, продолжать ли). |
Примеры практического применения
Давайте рассмотрим несколько конкретных примеров, чтобы увидеть, какnpxон может продемонстрировать свою мощь.
Пример 1: Запуск одноразовой команды (самый распространённый сценарий)
Вы хотите использоватьcowsayэтот забавный маленький инструмент, чтобы заставить корову говорить в терминале, но не хотите устанавливать его.
Шаг 1: Запуск напрямую с помощью npx
npx cowsay hello
Пояснение кода:npxОн проверит, существует ли локальныйcowsayпакет. Если нет, он автоматически скачает его из npm и автоматически удалит за собой после выполнения команды.
Ожидаемый вывод:
npx cowsay hello Need to install the following packages: [email protected] Ok to proceed? (y) y _______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Шаг 2: Запуск с определённой версиейЕсли вы хотите использовать определённую версию:
npx [email protected] hello1.4.0
Вывод:
____________
< hello1.4.0 >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Пример 2: Использование шаблона для создания проекта
Возьмём в качестве примера создание проекта React:
Традиционный способ (больше не рекомендуется):
npm install -g create-react-app # 全局安装 create-react-app my-app # 使用
Проблемы с этим способом установки:
- Глобально устанавливает кучу инструментов
- Путаница с версиями
- Компьютер становится всё более захламлённым
Современный способ (с использованием npx):
npx create-react-app my-app
Пояснение кода:npxОн временно загрузит последнюю версиюcreate-react-app, использует её для создания скелета проекта, и после завершения она не останетсяcreate-react-appв вашей глобальной среде. В следующий раз, когда вы создадите проект, он всё равно загрузит последнюю версию.
Пример 3: Запуск локальных инструментов проекта
Предположим, вы установилиwebpackкак зависимость для разработки (npm install webpack --save-dev).
Традиционный вызов (хлопотный):
# 需要输入冗长的路径
./node_modules/.bin/webpack --version
# 或者在 package.json 中配置 scripts
# "scripts": { "build": "webpack" }
# 然后运行
npm run build
Использование npx (очень лаконично):
npx webpack --version # 或直接运行构建 npx webpack
Пояснение кода:npxОн будет разумно отдавать приоритет поиску проектныхnode_modulesподwebpackдля выполнения.
Пример 4: Выполнение скрипта из GitHub
npxВы даже можете запускать код из GitHub gists или репозиториев.
npx https://gist.github.com/username/abcdefg
Обратите внимание: запуск неизвестного кода из интернета связан с рисками безопасности; убедитесь, что источник заслуживает доверия.
Три основные возможности npx
1. Запуск любого npm-пакета напрямую
Общий формат:
npx 包名
Пример:
npx cowsay hello
Он напрямую запустит маленькую коровку командной строки 🐮
2. Запуск локальных зависимостей проекта
Многие инструменты устанавливаются только в проект:
npm install vite
Раньше нужно было:
./node_modules/.bin/vite
Теперь:
npx vite
Автоматически находит для вас локальные исполняемые файлы
3. Запуск с последней версией (не засоряет систему)
npx create-next-app@latest my-app
Всегда используйте последнюю версию инструмента для создания проектов
Не нужно обновлять глобальные инструменты
Самые распространённые сценарии npx
Создание проектов
npx create-react-app my-app npx create-next-app npx vue-cli create my-vue npx degit user/repo
Временные инструменты
npx eslint . npx prettier --write . npx serve .
Запуск сервера разработки
npx vite npx nodemon app.js
Продвинутые советы и соображения
1. Объединение нескольких пакетов
Иногда команда должна зависеть от нескольких пакетов. Например, вы хотите запустить простой HTTP-сервер в каталоге и одновременно использоватьbrowser-syncчтобы реализовать live reload. Хотя это не часто встречается,npxэто можно сделать:
npx -p http-server -p browser-sync -c 'http-server & browser-sync start --proxy "localhost:8080" --files "**/*"'
Пояснение кода:
-pУкажите пакеты для подготовки.-cУкажите полную строку команды для запуска.
2. Что следует учесть
- Сетевое подключение: При первом запуске пакета его нужно скачать из сети, и скорость зависит от вашей сети.
- Безопасность:
npxОн автоматически скачает и выполнит код.Запускайте только те источники и пакеты, которым доверяете.。 - Временный каталог: Скачанные пакеты хранятся во временном каталоге операционной системы и могут периодически очищаться системой.