【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

我们每天都使用CLI程序(例如Terminal,cmd,Powershell等)进行软件开发,你使用的每个工具本质上都是其他软件工程师的产品,我们也可以制作自己的CLI工具。

本文介绍使用JavaScript从零开始制作自己的命令行工具。

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

进阶版CLI

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

简单版CLI

让我们开始吧!


M 8 4 ^ v 4 c N先,让我们制作一个简单的CLI工具,该工具会打印“ HelloWord”? V C - a I

要制作CLI,您需要制作两个文件

  • package.json:将设置和配置指定- e c G {入口
  • index.js:根据CLI命令的可执行文件

添加Package.json 文件

我们使用 npm init 即可生成该[ $ 2 6 J a C W 7文件

// packa0 R + ^ge.json
{
\"name\": \"my-cli\",
\"versionA 8 C o 7 T\": \"0.0.1R 9 6 - ] z k q\",
\"description\": \"nodejs cli program\",M h o , / $ H J
\"main\": \g $ a ~ Y"$ Z w [index.js\",
\"scripts\": {
\"test\": \"echoH Q a C H # - L L \\\"Error: no test specified\\\" && exit 1\"
},
\"author\": \"Dunizb\",
\"license\": \"ISC\U E n w I 8"
}

在package.json中,指定有关当前CLI程序的元数据:nameversiondescriptionauthor等。

创建 index.js 可执行文件

// index.j, G I F A X Ms
#! /usr/bin/env node
console.log(N * X | @ / J k\'Hello CLI\');

该文件仅在控制台上打印Hello CLI

那么,第一句话是什么意思?

LinuxA U c & j + m基于Unix的操作系统(例如Mac)中,#!/usr/bin/env node 不仅仅是一个注释。它使用在 /usr/bin/env 中注册的node命令来运行文件- J B , K s b

但是,在Windows中,这只是一个注释。

添加bin属性

我们添加 bin 属性来实际运行 index.js 文件

// package.json
{
\"name\": \"my-cli\",
\"version\": \"0.0.1\",
...
...
| r S\"license\": m ; d b 3 w j\"ISC\",
\"bin\": {
\"cli\": \"./index.js\"
}
}

bin 属性具有可执行文件,c0 4 / + ] w o h :li 命令要求运行 iR K Xndex.js 文件。

运行CL: Q K + dI

最后,让我们运行CLI在控制台上打印Hello CLI。通过运行 npm i -gpackage.json中安装配置。

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

下次您在控制台上运行 npm i -g,您获得了 updated 1 package...,而不是 added 1 package ...。

然后运行 cli 命令。终于, Hello CLI!

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

您可能需要在Mac和Linux环境中附加 sudo 命令(即 sudo cli),没有 node_modules 文件夹,因为您没有安装依赖项。

CLI中的Process.argv

// index.js
#! /usr/bin/= ! 2 t W * F ` nenv no$ L ]de
console.log(\'Hello CLI\z 4 } P', process.argv);

您可以使用 process.argv 在命令中找到选项,选项以数组形式显示。

您不需要在每次更新 index.j# q g b w =s 代码时再次运行 npm ii z s 4 P C -g,因为您已经将 package.jsonbin 属性连接到 cli 命令和 index.js 文件。因此,每次调用 cli 命令时,都可以执行 index.js 文件(它不是来h s Z k Y g A自缓存的,因此您可以运行新的更新内容)。

在终端中运行命令:

cm x F y p X - Z (li one two three four

结果

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

数组中的前两个元素nodecli 命令 n z o E n的路径。(对于Windon 3 r 0 G x t O tws系统,它可能会打印出不同的输出)输出可能会因您的计算机设置和环境而异(这取决= W M ? ! ) O` L D您在计算机上安装nodecli命令的位置)。

此外,one two tha o m oree four 表示为数组类型


其次,通过“用户输[ ] 8 ; ] Y +入”与用户交I W ^ Z w 0 0 ~ {互的简单CLI工具

使用称为readline的本} I m s机Node模块从用_ ; , e F , .户那里获取输入。

// index.js
#! /usr/bin/env node
const re[ g vadline = re8 4 ; o w Aquire(\'readlil c I L n f :ne\');

const rl = readline.createInter@ . h kface({
input: process.0 D #stdink O # s Y L j,
outputL % & =: process.stdout,
});

rl.question(\"你今天好吗(快乐, 悲伤)?\",, 7 w n Q 2 a (ansn r [ 6 u n gwer) => {
if(answer === \"快乐\") {I x @ 5 _ h s 0
console.log(\"听你这么说我很高兴\");
} else if (answer === \"悲伤\% d v }") {
consob ] + #le.log(\; y } / Q e ^"希望你明天感觉o V j V = l A好些\")
} else {
console.log(\"你是快乐还是悲伤?\");
}
rl.close();
});

你可以使用 readline 模块中的 createInteS X Y L T - Arface 方法创建 rlX J 8 e R A f e j 对象。

proceM ? h ! _ss.stdinprocess.stdou T * ^ ` b Qt 是控制台输入和输出流。

readline 模块接受来自用户的输入,rl 对象提问法是向用户提* 4 -问的一种方法,回调函数具有一个 answer 参数(来自用~ . + N ]户的输入),如果所有 I/O(输入和输出)完成,则关闭 rl 对象。

我们是否可以通过再次询问用户 @ + R在这种情况下是否既不回答“高兴”也不回答“悲伤”来进一步提高CLI ?


再次询问用户时,是否回答错误

看以下代! x D Y 3 e

#! /usr/bin/env node
const re: = r l , w xadline = require(\'readlI G a R nine\');

const rl = readline.creY I )ateInterface({
input: process.stdin,
output: process.stdout,[ $ y S q | d
});

console.clear();

const answerCallback = (answer) => {
if (answer === \"快乐\") {
console.log(\"听你这么说我很高兴\");
rl.close();
} else if (answer === \"悲伤\") {
console.log(\"希望你明天感觉好些\");
rl.close();
} else {
ci & v 7onsole.log(\"你是快乐还是悲伤?\"n 2 U);
rl.question(\"你今天好吗(快乐,悲伤)? \", answerCall~ 9 E 6 & E s Jback);
}
};

r? ; I # y 5 - 9l.question(\"你今天好吗(快乐,悲伤)?\", answerCallback);

当程序开始使用 c| a P 3 N P Lonsole.clear 时清除控制台,然后使用 rl.question~ [ n j 7 x : Z 方法询问用户输入并使用ansm F C { # _ H SwerCallback 函数获得答案。

如果答案既不是悲伤也不是快乐,请清除控制台,然后递归再次提问,如果答案是悲伤或快乐,关闭输入控制台。

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

在本文中,我们练习了一种制作简单的CLI工具(要求用户输入)的方法。希望你喜欢阅读。


如果对你有所启发和帮助,可以点个关注收藏,也可以留言讨论,这是对作者的? L I 0 ^ S k最大鼓励。

作者简介:Web前端工程X . b / t C ]师,全栈开发工程师、持续学习者。

上一篇

小米有品超级防晒衣来了!就算2个太阳也不怕

下一篇

富士康又摊上事了!郭台铭“喝凉水都塞牙”?网友:扶不起的阿斗

评论已经被关闭。

插入图片
返回顶部