Создайте инструмент Node CLI для своей команды

Node.js

Думаете, у вашей команды будет повторяющаяся работа? Подумайте об этом, инструменты CLI могут уменьшить дублирование работы, унифицировать нормы сотрудничества и повысить эффективность работы.

Почему узел

У Node самое большое экологическое сообщество с сотнями тысяч пакетов, многие из которых созданы специально для создания мощных инструментов CLI. С помощью экосистемы сообщества вы можете быстрее создавать более мощные инструменты CLI. В то же время с помощью инструментов управления пакетами, таких как NPM и Yarn, вы также можете быстро распространять свои инструменты CLI, упрощая пользователям использование ваших инструментов CLI.

быстрый старт

Инициализировать проект

mkdir cli-tool && cd cli-tool
npm init --yes

Создайтеsrc/cli.js, напишите следующее:

// src/cli.js
module.exports = function cli() {
  // 打印命令参数
  console.log(process.argv);
};

Создайтеbin/cli.jsфайл, который является входным файлом инструмента CLI со следующим содержимым:

#!/usr/bin/env node
const cli = require("../src/cli");

cli();

Фокус: изменитьpackage.json, записыватьbinполе, добавитьcliЗаказ

{
  "name": "cli-tool",
  "version": "1.0.0",
  "description": "",
  "main": "src/cli.js",
  "bin": {
    "cli": "bin/cli.js"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

В корневом каталоге проекта запустите:

npm link

введите в терминалеcliкоманда для печати чего-то похожего на следующее:

[
  '/Users/xx/.nvm/versions/node/v12.16.2/bin/node',
  '/Users/xx/.nvm/versions/node/v12.16.2/bin/cli'
]

На этом простой инструмент Node CLI готов.

Фундаментальный

bin

NPM реализует возможность добавлять исполняемые файлы в Packages к глобальной PATH, когда вpackage.jsonДобавлен файлbinполе, НПМ будетbinЗаявленные ссылки на файлы (мягкие ссылки) наbinкаталог (доступен глобально) или./node_modules/bin/(доступно на месте).

как показано нижеbinСоздайте/usr/local/bin/myappприбытьcli.jsМягкая ссылка:

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

В то же время мы будемbinДобавить в начало объявленного файла#!/usr/bin/env nodeзаявление, чтобы гарантировать, что система выполнит этот файл с помощью Node.

npm link

npm linkКоманда создаст мягкую ссылку из текущего пакета на Gloabl, сделав текущий пакет доступным глобально, подобно виртуальномуnpm i --global packaeкоманда, полезная при локальной отладке.

упражняться

разбор параметров

Основная возможность инструмента CLI состоит в анализе команд и параметров CLI, введенных пользователем, для реализации соответствующих функций. узлаprocess.argvмассив содержитNodeПараметры командной строки, переданные при запуске процесса путем разбораprocess.argvДостаточно массива, и в сообществе есть много связанных пакетов, таких как:yargs,minimistЖдать.

Рекомендуется здесь[commander](https://github.com/tj/commander.js)Создайте свой инструмент командной строки Commander — это относительно полное решение Node CLI с такими функциями, как анализ входных параметров, связывание логики обработки и вывод командных строк. Только рекомендуется попробовать самостоятельно разобраться с разбором параметров команды, если функционал командора не соответствует вашим потребностям.

интерактивный ввод

В некоторых случаях инструменту CLI может потребоваться использовать интерактивный ввод, например при вводе пароля, который не подходит для прямого ввода через параметры. Для простого ввода вы можете напрямуюreadlineМодуль:

const readline = require("readline");
const question = ["请输入您的姓名", "请输入您的年龄"];
const result = [];

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: `?${question[0]} `,
});

rl.prompt();

rl.on("line", (line) => {
  result.push(line.trim());
  const max = result.length;
  if (max === question.length) {
    rl.close();
  }
  rl.setPrompt(`?${question[max]} `);
  rl.prompt();
}).on("close", () => {
  console.log(`谢谢参与问答 *** 姓名: ${result[0]} 年龄: ${result[1]}`);
  process.exit(0);
});

Когда требуются более сложные взаимодействия, такие как выбор списка, вам нужно использовать пакет в сообществе. Здесь рекомендуется использовать опросник с более мощными функциями, такими как:

выпускать

Наконец, вы можете быстро распределить инструмент вашего узла CLI через NPM:

# 登陆 npm
npm adduser

# 打 Tag
npm tag v1.0.0

# 发布
npm publish

рекомендовать