Оригинал статьи можно найти по адресу https://dev.to/iulianoctavianpreda/run-your-npx-script-directly-from-github-create-your-own-cli-commands-and-other-stories-4pn3.
Это будет короткое чтение, возможно, я не могу вам этого обещать, но, по крайней мере, я сделаю его настолько интересным, насколько это возможно.
Во-первых, что такое NPX и что такое команды CLI?
NPX — это инструмент командной строки, предназначенный для запуска пакетов NPM, содержащих сценарии CLI.
Команда CLI — это программа, которую можно запустить из командной строки. по имени, например, gcc
или cd
или ls
и т. д.
В NodeJs у вас есть возможность создавать команды CLI, которые можно запускать только из сценариев NPM, помните npm run <script name>
?
Хорошим примером этого являются tsc
или babel
или webpack
, которые, если они не установлены глобально (и не добавлены в путь), могут быть
вызваны только изнутри скрипта из раздела scripts
в файле package.json
.
Нам понадобятся NodeJs и NPX, установленные как глобальный пакет для остальной части статьи. Любые NodeJs › v5.0 должны иметь уже установленный NPX, но если он не работает, вы всегда можете запустить npm install -g npx
.
На странице NPX Github мы можем получить следующую команду для запуска в терминале: npx github:piuccio/cowsay JavaScript FTW!
.
Это должно подсказать нам что-то вроде этого:
Эта команда установила пакет во временную папку и запустила команду с тем же именем, что и репозиторий.
Просто упомянем, что команда npx cowsay JavaScript FTW!
будет работать нормально, потому что пакет существует и в NPM.
Поскольку мы только что рассмотрели, как его использовать, теперь нам нужно научиться писать команду, которую можно использовать из CLI (или с помощью NPM).
Чтобы сэкономить время, я перечислю инструкции:
- Создать новую папку
- Откройте терминал в папке
package.json
- для этого мы можем использоватьnpm --init
и принять значения по умолчанию или настроить входные данные, такие как имя, описание, лицензия и т. д.- Создайте основной файл приложения — создайте, допустим, файл с именем
index.js
- В
package.json
мы добавим раздел команд:
"bin": { "awesome-command": "index.js", }
#!/usr/bin/env node console.log("Awesome Command");
- Хорошая работа, теперь, если мы опубликуем пакет и установим его, мы сможем его использовать, но… Допустим, мы торопимся и просто хотим посмотреть, работает ли он, так что же мы можем сделать? Мы
npm link
. Эта команда добавит его в глобальные пакеты, как если бы он был установлен с флагом-g
. - Запустите
awesome-command
с любого терминала, и он напечатаетAwesome Command
.
Итак, как помогает NPX? Мы уже можем запустить команду с любого терминала. Что ж, это правда, но только сейчас и уж точно не всегда.
Если бы мы установили пакет локально, мы бы не смогли запустить awesome-command
в терминале и ожидать, что он заработает. Нам пришлось бы добавить его в раздел scripts
в package.json
вот так:
"scripts": { "awesome": awesome-command },
а затем npm run awesome
или... запустить npx awesome-command
.
Теперь самое интересное: что, если мы хотим сделать команду доступной через Интернет?
Что ж, тогда мы публикуем пакет npm, и каждый может выбрать npm -install <package>
его или npx <package>
. Помните, что только одна из команд должна соответствовать имени пакета.
Но что, если мы не хотим публиковать пакет?
Затем мы можем просто разместить пакет на Github в новом репозитории, и любой сможет установить его с помощью npm -install user/<repository>
или запустить с помощью npx github:<user>/<repository>
. Опять же не забудьте, что одна из команд в разделе bin
должна совпадать с именем репозитория.
В заключение, если команда принимает дополнительные аргументы, мы всегда можем добавить их после имени команды, например npx github:<user>/<repository> arg1 arg2
.
Надеюсь, вам понравилось читать статью так же, как мне понравилось ее писать.