Начните быстро с разработки Node Cli

Node.js внешний интерфейс Командная строка
Начните быстро с разработки Node Cli

Привет всем, яLuozhu 🎋., деревянный фронтенд, живущий в Ханчжоу 🧚🏻‍♀️, если вам понравилась моя статья 📚, вы можете помочь мне собрать духовную силу ⭐️ лайком.

Node.js имеет широкий спектр применения и обычно используется для разработки сервисов, настольных приложений и т. д. Он хорошо известен разработчикам.Node.js имеет еще один очень практичный сценарий — приложения командной строки (далее в совокупности именуемые CLI).

Исходный код, на который можно ссылаться в этой статье:На GitHub.com/ есть этот гигантский нин...

HelloWorld

Создаватьyoungjuningкаталог и войдите в этот каталог, используя:

$ mkdir youngjuning && cd youngjuning

Создайте новый в этом каталогеbin/cli.js:

#!/usr/bin/env node
console.log('Hello World')

использоватьpackage.jsonизbinЭлемент используется для указания расположения исполняемого файла, соответствующего каждой внутренней команде:

"bin": {
  "youngjuning": "./bin/cli.js"
}

Введите в командной строкеnpm linkилиnpm install -gУстановите текущий проект в глобальную среду, чтобы его можно было использовать напрямую.youngjuningдля запуска файла:

commander.js

Node.js дает намprocess.argvДля чтения параметров командной строки мы ее здесь вводить не будем.Если интересно, можете изучить сами.Я выбрал tj Godcommander:

  • command: определите команду командной строки, за которой следует имя, разделенное пробелами, например.command( 'app [name]')
  • alias: определить более короткую команду командной строки
  • description: описание, оно будет отображаться в справке
  • option: определение параметров. Он принимает четыре параметра
    • В первый параметр можно ввести короткое имя-aи длинные имена–app,использовать|или,Разделение, при использовании в командной строке, эти два эквивалентны, разница в том, что последнее можно получить через обратный вызов в программе
    • Второй — описание, которое будет вhelpотображается в информации
    • Третий параметр — это функция обратного вызова, а параметр, который он получает, — этоstring, иногда нам нужна командная строка для создания нескольких модулей, нам нужен обратный вызов для обработки
    • Четвертый параметр является значением по умолчанию.
  • action: Зарегистрируйтеcallbackфункция, здесь следует отметить, что текущий обратный вызов не поддерживает объявление переменных let
  • parse: Разобрать командную строку

inquire.js

Плагин интерактивного ввода команд!

базовая грамматика

const answers = await inquirer.prompt([
  /* Pass your questions in here */
])
console.log(answers)

Подробное объяснение параметра

  • type: указывает тип вопроса, в том числе:input, confirm, list, rawlist, expand, checkbox, password, editor;
  • name: переменная, в которой хранится ответ на текущий вопрос;
  • message: описание проблемы;
  • default: по умолчанию;
  • choices: Список опций, доступных для определенного типа, и содержит разделитель;
  • validate: проверить ответ пользователя;
  • filter: фильтровать ответ пользователя и возвращать обработанное значение;
  • transformer: обработка эффекта отображения ответа пользователя (например: изменение шрифта или цвета фона ответа), но не влияет на содержание окончательного ответа;
  • when: По ответам на предыдущие вопросы определить, нужно ли отвечать на текущий вопрос;
  • pageSize: изменить некоторыеtypeКоличество отображаемых строк под типом;
  • prefix: Исправлятьmessageпрефикс по умолчанию;
  • suffix: ИсправлятьmessageСуффикс по умолчанию.

Внедрение динамических шаблонов

  • использоватьrecursive-readdirБиблиотека рекурсивно читает все файлы проекта
  • использоватьhandlebarsсделать замену шаблона
  • использоватьfsМодуль выполняет операции чтения и записи файлов.
const fs = require('fs')
const handlebars = require('handlebars')
const recursive = require('recursive-readdir')

const compile = (meta, file) => {
  const content = fs.readFileSync(file).toString()
  const result = handlebars.compile(content)(meta)
  fs.writeFileSync(file, result)
}

module.exports = (meta, src) => {
  recursive(src, (err, files) => {
    files.forEach(file => {
      compile(meta, file)
    })
  })
}

инструмент командной строки

  • chalk.js: модуль для украшения командной строки
  • ora: Elegant terminal spinner
  • ncp: асинхронно копировать файлы, включая пустые папки
  • recursive-readdir: рекурсивный список всех файлов в каталоге и подкаталогах, за исключением самого каталога.
  • shelljs: Unix shell commands for Node.js
  • log-symbols: специальный флаг для печати журнала
  • download-git-repo: Download and extract a git repository (GitHub, GitLab, Bitbucket) from node
  • global-prefix: получить префикс глобальных установок npm
  • exec-sh: выполнить команду оболочки, чтобы перенаправить все потоки stdio, что проще в использовании, чем команду exec shelljs.
  • wml:wml прослушивает изменения в папке (используя сторож) и копирует измененные файлы в другую папку.
  • cmd-open: расширенная команда Windows открыта
  • shx: shx is a wrapper around ShellJS Unix commands, providing an easy solution for simple Unix-like, cross-platform commands in npm package scripts.

Эта статья была впервые опубликована в "Официальный сайт Луожу", синхронизировано с официальным аккаунтом"Дом утреннего чая в Луочжу"а также"Колонка самородков".