In diesem Artikel lernen Sie Schritt für Schritt etwas über eine NodePraxis und sprechen darüber, wie Sie ein mycli-Befehlszeilentool/Gerüst basierend auf einem Node erstellen. Ich hoffe, dass es für alle hilfreich ist!
Stellen Sie zunächst sicher, dass auf dem Computer eine node.jsUmgebung vorhanden ist
Führen Sie den folgenden Code in der Befehlszeile aus, um einen package.json file<code>package.json
文件
npm init -y
此时,命令行执行mycli
肯定会报错。
配置自定义命令
package.json
添加bin
字段,关联mycli
命令
"bin": { "mycli": "./test.js" },
/test.js
文件console.log("mycli命令执行成功");
install
安装命令,但是项目还没有发布到npm,所以暂时先用npm link
命令,把mycli
命令关联到全局。此时命令行再执行 mycli
就不会再报错。
脚本配置
test.js文件:
console.log("mycli命令执行成功");
然后再执行 mycli
,此时会出现一个提示错误的弹窗
这是因为,执行mycli
命令的时候相当于让计算机执行了这个文件,而计算机系统是无法直接执行js文件的,这就需要我们在脚本代码第一行加入一个配置,指定计算机上的node.js
程序来执行这个js脚本文件。
#!/usr/bin/env node
由于更改了执行环境,需要删除之前link到的文件,文件位置可能是C:Program Filesnodejsnode_modules
,找到mycli
删除,然后再重新执行npm link
。
现在控制台再来执行mycli
,可以看到控制台正确打印。
Chalk
命令行输出五颜六色的字体Ora
加载中loading的效果,类似的还有progress库commander
设计命令inquirer
交互功能(如:提问...)Chalk
npm install chalk@4.1.2 -S
const chalk = require("chalk"); // chalk // const hello = chalk.red("hello"); // const hello = chalk.blue.bgRed("hello"); // const hello = chalk.blue.bgYellow("hello"); const hello = chalk.rgb(200, 200, 200).bgRgb(0, 200, 3)("hello"); console.log(hello);
Ora
npm install ora@4.0.3 -S
const ora = require("ora"); // ora const spinner = ora({ text: "安装中..." }); spinner.start(); setTimeout(() => { // spinner.stop(); spinner.succeed("安装成功"); // console.log("安装成功"); }, 2000)
start
开始加载stop
停止加载succeed
结束加载并带有成功的样式commander
开发中经常使用的命令,如vue -V
git --version
vue create
等命令,想要实现这样的命令需要用到commander这个库。
使用的命令后面带的-V
--help
等,可以理解为是命令的参数,那么我们就需要获取到这些参数,通过判断参数的不同来处理不同的事件。
那在node环境中,可以通过process.argv
来获取到这个参数。而commander库,帮助我们封装好了一些方法,不用我们自己去判断用户输入携带的指令是什么。
npm install commander@8.2.0 -S
const commander = require("commander"); // ... commander.parse(process.argv); // 放在后面
安装完成之后,commander会自动提供给我们一些命令,如--help
,下面来测试一下:
mycli --help
commander.version("1.0.0");
执行 mycli -V
可以看到控制台打印了 1.0.0
版本号。
自定义指令方法
commander.option(指令名, 描述, 回调函数)
--init
指令:commander.option("--init", "this is init", () => { // chalk // const hello = chalk.red("hello"); // const hello = chalk.blue.bgRed("hello"); // const hello = chalk.blue.bgYellow("hello"); const hello = chalk.rgb(200, 200, 200).bgRgb(0, 200, 3)("hello"); console.log(hello); // ora const spinner = ora({ text: "安装中..." }); spinner.start(); setTimeout(() => { // spinner.stop(); spinner.succeed("安装成功"); // console.log("安装成功"); }, 1000) })
现在执行mycli --init
commander.option("--number <num>", "log a number", (num) => { console.log(num); })
mycli
über die Befehlszeile wird auf jeden Fall ein Fehler gemeldet. 🎜🎜 Benutzerdefinierte Befehle konfigurieren🎜🎜🎜package.json
Fügen Sie das Feld bin
hinzu und verknüpfen Sie es mit mycli
Befehl🎜commander.command("create <projectName>").action((projectName)=>{ console.log(projectName); })
/test.js
Dateinpm install inquirer -S
inquirer.prompt([ { type: "input", name: "username", message: "请输入用户名:" } ]).then((answer)=>{ })
install
ist erforderlich, aber das Projekt wurde nicht veröffentlicht zu npm. Verwenden Sie daher vorerst den Befehl npm link
, um < Der Befehl code>mycli ist mit der globalen Welt verknüpft. mycli
in der Befehlszeile ausführen, werden keine Fehler mehr gemeldet. 🎜🎜🎜🎜🎜 Skriptkonfiguration🎜🎜🎜test.js-Datei: 🎜const inquirer = require("inquirer"); commander.command("add user").action(() => { inquirer.prompt([ { type: "input", name: "username", message: "请输入用户名:" } ]).then((answer) => { console.log(answer); }) })
mycli
aus und eine Fehlermeldung wird angezeigt. Fenster hoch🎜🎜🎜 🎜Dies liegt daran, dass die Ausführung des Befehls mycli
gleichbedeutend damit ist, den Computer die Datei ausführen zu lassen, und das Computersystem 🎜die js-Datei nicht direkt ausführen kann🎜, dass wir sie hinzufügen müssen die erste Zeile des Skriptcodes Eine Konfiguration, die das Programm node.js
auf dem Computer angibt, um diese js-Skriptdatei auszuführen. 🎜commander.command("testcon").action(() => { inquirer.prompt([ { type: "confirm", name: "age", message: "是否大于18岁?" } ]).then((answer) => { console.log(answer); }) })
mycli
und löscht sie Führen Sie dann npm link
erneut aus. 🎜🎜Führen Sie nun mycli
auf der Konsole aus und Sie können sehen, dass die Konsole korrekt druckt. 🎜🎜🎜Verwendung verwandter Toolkits🎜🎜Chalk
-Befehlszeilenausgabe bunter SchriftartenOra
Ladeeffekt, ähnlich dem Fortschritt Bibliothek commander
Designbefehl inquirer
interaktive Funktionen (z. B. Fragen stellen...)< /li>< /ul>🎜🎜Kreide🎜🎜commander.command("testlist").action(() => { inquirer.prompt([ { type: "list", name: "lib", message: "选择用到的框架:", choices: [ "vue2", "vue3", "react", "svelte", ] } ]).then((answer) => { console.log(answer); }) })
npm install download-git-repo@3.0.2 -S
const downgit = require("download-git-repo"); downgit("github:kongcodes/vue3-vant", downUrl, { clone: false }, function (err) { console.log(err) })
commander.command("create <projectName>").action((projectName) => { const spinner = ora({ text: "正在下载https://github.com/kongcodes/vue3-vant..." }); spinner.start(); fs.mkdirSync(`./${projectName}`); const downUrl = `${process.cwd()}\${projectName}`; downgit("github:kongcodes/vue3-vant", downUrl, { clone: false }, function (err) { if (err) throw err; spinner.stop(); console.log(chalk.green("downgit success")); }) })
start
, um den Ladevorgang zu startensucceed
Beendet den Ladevorgang mit erfolgreichem Stilvue -V
git --version
vue create</code > und andere Befehle. Um solche Befehle zu implementieren, müssen Sie die 🎜commander🎜-Bibliothek verwenden. 🎜🎜Der <code>-V
--help
, dem der Befehl folgt, kann als Parameter des Befehls verstanden werden. Dann müssen wir diese Parameter ermitteln und beurteilen Umgang mit verschiedenen Ereignissen. 🎜🎜In der 🎜node🎜-Umgebung können Sie diesen Parameter über process.argv
abrufen. Die 🎜commander🎜-Bibliothek hilft uns, einige Methoden zu kapseln, ohne dass wir die Anweisungen der Benutzereingaben beurteilen müssen. 🎜--help
, testen wir es unten: 🎜rrreeemycli -V</ code>Sie können sehen, dass die Konsole die Versionsnummer <code>1.0.0
ausgibt. 🎜🎜🎜Benutzerdefinierte Befehlsmethode🎜🎜🎜commander.option (Befehlsname, Beschreibung, Rückruffunktion)
🎜-- init< /code>-Befehl: </li></ul>rrreee🎜Führen Sie nun den <code>mycli --init
-Test aus: 🎜🎜🎜🎜commander.option("--number <num>", "log a number", (num) => { console.log(num); })
<参数名>
表示必传的参数,[参数名]
表示非必传的参数。控制台输入mycli --number 100
回车,可以看到会输出100
。
自定义命令方法
commander.command("create <projectName>").action((projectName)=>{ console.log(projectName); })
执行 mycli create xx
回车,控制台可以看到 输出了xx
。
查看帮助
执行 mycli --help
,可以看到我们刚才配置的指令和命令都出现在了帮助列表里。
inquirer
npm install inquirer -S
prompt
提问的方法inquirer.prompt([ { type: "input", name: "username", message: "请输入用户名:" } ]).then((answer)=>{ })
type
表示问题的类型,取值可能是:input
, number
, password
, editor
等。
answer
是 {username: 输入的值}
input
const inquirer = require("inquirer"); commander.command("add user").action(() => { inquirer.prompt([ { type: "input", name: "username", message: "请输入用户名:" } ]).then((answer) => { console.log(answer); }) })
confirm
commander.command("testcon").action(() => { inquirer.prompt([ { type: "confirm", name: "age", message: "是否大于18岁?" } ]).then((answer) => { console.log(answer); }) })
输入y
或n
来进行判断。
list
commander.command("testlist").action(() => { inquirer.prompt([ { type: "list", name: "lib", message: "选择用到的框架:", choices: [ "vue2", "vue3", "react", "svelte", ] } ]).then((answer) => { console.log(answer); }) })
执行 mycli testlist
命令:
download-git-repo是一个拉取代码的工具。
安装
npm install download-git-repo@3.0.2 -S
const downgit = require("download-git-repo"); downgit("github:kongcodes/vue3-vant", downUrl, { clone: false }, function (err) { console.log(err) })
downgit
方法里面的第一个参数理解为在github上面下载kongcodes用户的vue3-vant
项目模板。第二个参数downUrl
为要将模板下载到什么目录下。第三个参数clone
是否要用git clone
下载。第四个参数 为下载完成执行的一些事情。
command
方法使用commander.command("create <projectName>").action((projectName) => { const spinner = ora({ text: "正在下载https://github.com/kongcodes/vue3-vant..." }); spinner.start(); fs.mkdirSync(`./${projectName}`); const downUrl = `${process.cwd()}\\${projectName}`; downgit("github:kongcodes/vue3-vant", downUrl, { clone: false }, function (err) { if (err) throw err; spinner.stop(); console.log(chalk.green("downgit success")); }) })
执行 mycli create pro
回车,会在当前目录下创建pro
目录,下载vue3-vant
模板到这个目录里。
https://github.com/kongcodes/mycli
更多node相关知识,请访问:nodejs 教程!
Das obige ist der detaillierte Inhalt vonKnoten praktische Entwicklung eines mycli-Befehlszeilentools. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!