Как разработать свой собственный инструмент cli с помощью узла
вдохновение
Вдохновение и сценарий для написания этого инструмента пришли отyoutubeнебольшой разговор
сцены, которые будут использоваться
Изначально мы написали блог, чтобы показать оболочку, такую как: установка и запуск докера, сценарии развертывания в один клик и другие терминальные операции.Нам нужно сделать много скриншотов, чтобы показать пользователям.Почему мы не можем сгенерировать веб страница более интуитивно и удобно?
как использовать
- Установить
sudo npm install share_shell -g
- помощь
tw --help #1.0暂时用这个命令,没想到好的缩写
- Посмотреть версию
tw --version || tw -v
- использовать
# tw share "要展示的命令" -p "路径"
# 例如想 docker ps -a 秀一波你的docker容器
tw share "docker ps -a" 或 tw s "docker ps -a" # 默认生成 share_you_shell.html 到当前目录
# 还可以指定路径
tw share "ls -all" -p /usr/local/html/share_shell.html #自动创建文件,存在默认覆盖
Как сделать свой кроссплатформенный инструмент на основе node
① Думать перед производством
-
Задействованный технологический стек и выбор технологий
-
shelljs для обработки CMD
首先我需要拿到 *windows* 或 linux* 的系统回调,使用 *linux* 中的
# 在终端获取输入任何命令的流的返回值
sed -n 'p;n;p'
Тогда сначала рассмотрим *shelljsЕдиное обнаружение API дляsed
Обработки очень мало, и она не соответствует нашим потребностям, но мы видим универсальную функциюshell.exec
, мы используем его обратный вызов, чтобы получить наш текст
-
fsилиfs-extra
fs-extraдляfsотношения похожиlodashа такжеunderscoreПервый инкапсулирует второй, обеспечивает лучшую поддержку и обратно совместим.APIЭто непросто, мы в основном используем его для создания простогоhtmlфайл, чтобы поделиться нашимshell
-
commander
мы выбралиnodejsизcommanderсделать что-то вродеgit dockerСтильcliинструменты командной строки, так как нет другого лучшего варианта
-
разное
я сам его используюlodash stringВыполняется ленивая операция.Недостаток в том, что добавляются две зависимости.Преимущество в том, чтоспешите~
② Подготовка перед написанием кода
-
инициализация
npm init
Инициализация генерирует стандартpackage.json
файл, включая вашgit
Информационный релизnpm
Можно найти ваше описание, контактную информацию, номер версии и т.д. -
Создайте новую папку bin
Это дом канонического исполняемого инструмента. создать новый
tw.js
, потому что это стиль принтера, поэтому у него есть слепое имяtypeWriter
Инициалы
③ Сначала определите основные команды терминала
-
редактировать
tw.js
var program = require('commander'); var appInfo = require('../package.json'); program.version(appInfo.version) // 拿到 package.json 你定义的版本 program .command('share <shell>') // 定义你的command .alias('s') // 缩写 .description('Enter the "shell" you want to convert and include it in \" \" ') // 描述 .option("-p, --path <path>", "Enter you html path , default ./share_you_shell.html") // option 字命令,可以无限多个 .action(function (cmd, options) { // 拿到cli输入的option子命令,没有可以默认 var path = typeof options.path == 'string' ? options.path : "./share_you_shell.html" // 执行你的操作 ↓ // 执行cli的command exec_shell.exec(cmd, (res) => { // 回调的res根据格式转为数组 var res_arr = S(res).lines() // 针对数组你的逻辑处理一波数组 let str = format.toTypedFormat([cmd].concat(res_arr)) // 异步制作你的文件,传入路径 file.mkfile(str, path) }) }).on('--help', function () { // --help commander 有默认处理,一般这部分无事可做,你还想干啥? }); program.parse(process.argv);
войтиtw -- help
наверное так
-
Улучшить код
Улучшите логику своих юнитов, конечно, вы также можете написать более элегантно.
-
Предупрежденные вопросы
Я этот проект буду заранее думать: сохранитьПереводчики для оболочкииспользоватьpreВвод прототипа
\n \t
, справитьсяscrollДержитесь внизу и, наконец, найдите случайный, напримерtypewriterjsБиблиотека с открытым исходным кодом, просто сгенерируйте фрагменты кода в соответствии с его стилем
④ Проверьте это
-
законченный?
node /bin/tw.js share "tree -L 2" -p xxx
Протестируйте его (возможно, он у вас не установлен)tree
, для любой другой исполняемой команды, длиннойping
Кроме) -
Пройти глобальный тест
Наконец-то мы опубликуем
npm
Включено, позволяя пользователям-g
Установите, вы должны проверить это в первую очередь.Первое: убедитесь, что вы находитесь в
package.json
файл добавленbin
узел. И указать основную программу, как я."bin": { "tw": "./bin/tw.js" },
-
бегать
sudo npm install . -g
-
воплощать в жизнь
tw share "tree -L 2" -p xxx/xxx/xx.html
если генерируется
xx.html
, поздравляю, вы готовы к публикации
④Как опубликоватьnpm
-
Проект готов, и следующий шаг — начать публикацию. Сначала зарегистрируйте аккаунт на npm, и не забудьте зайти на почту для проверки. Затем введите:
npm adduser
Далее вы узнаете свой логин, пароль и публичный адрес электронной почты в виде вопроса и ответа, а затем войдете
```
npm publish
```
- Уведомление! !
выпускатьnpmИсточник не будьcnpmИсточник Taobao, иначе ответ
401
ой
Затем вы увидите индикатор выполнения, а затем компонент будет успешно выпущен, вы можете перейти кnpmНайдите свой собственный пакет.
npm install share_shell
(зависит от тебяpackage.jsonНазвание проекта заполнено на тот момент)
даже ты казнишь
cnpm install share_shell
Его также можно скачать, Taobao очень быстро синхронизируется~
-
npm i share_shell -g
МировойвсеПользователи могут скачать
⑤ Мысли, которые вызывают
- думать
nodeТеперь, когда он предоставляет нам такой краткий способ, мы можем сделать что-то более значимое, например, создать для нашего проекта с открытым исходным кодомразвертывать,выпускать,Пакет,тестовое задание,CLIНабор инструментов, который может выполнять повседневную работупакетная обработка, такой как сценарий в предыдущей работе: несколько серверовБалансировка нагрузкиПросмотр бэкенд-лога - проблема, нужно открывать много терминалов, можно ли настроить?rsaилиsshКак насчет объединения нескольких конвейеров и перенаправления их на терминал для просмотра? Когда у нас есть идея, мы можем воплотить ее в жизнь
Наконец-то покажу новую игрушку.
обо мне
Чжуан Венда: Полная разработка Siege Lion
- Мне просто нравится учиться, и я хочу стимулировать всех учиться вместе🤓
- Нет ничего лучше, чем строить колеса 🤓
- ведение блога 🤓
- Запись обмена видео 🤓
- Попрактикуйтесь в технике 🤓
- Встаньте
flag
, но вернусь 🤓 - сейчас пишуbbs🤓