Оригинал статьи можно найти по адресу 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.

Надеюсь, вам понравилось читать статью так же, как мне понравилось ее писать.