Думаете, у вашей команды будет повторяющаяся работа? Подумайте об этом, инструменты 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