如何使用 Node 制作美观、简单的 CLI 应用
引导您内心的 Sindre Sohrus 并使用 Node 交付一个精美简单的 CLI 应用程序。
命令行应用程序是打包重复任务的简洁方法。本文将带您了解一些
用于构建 CLI 应用程序的工具。
订阅即可在您的收件箱中获取最新帖子(抢在其他人之前)。
这个想法💡
在合并/变基时,总是出问题的那个文件是 package-lock。
我们将介绍如何编写一个简单的实用程序,删除 package-lock.json 文件,然后重新生成(npm install)并将其添加到 git 索引中。
您可以在这里找到它:https://github.com/HugoDF/fix-package-lock并使用运行它npx fix-package-lock
。
通过管道传输到命令行
首先,我们将利用 Sindre Sohrus 的一个包,execa
它被描述为“更好的child_process
”。要使以下代码片段正常工作,请运行npm install --save execa
:
index.js
const execa = require('execa');
execa('ls').then(result => console.log(result.stdout));
node index.js
index.js
node_modules
package-lock.json
package.json
处理连续动作✨
要重新生成,package-lock
我们需要先删除它,然后运行npm install
。
为此,我们可以使用Listr,它允许我们做如下的事情:

运行npm install --save listr
并添加杠杆 Listr,如下所示:
index.js
:
const execa = require('execa');
const Listr = require('listr');
new Listr([
{
title: 'Removing package-lock',
task: () => execa('rm', ['package-lock.json'])
},
{
title: 'Running npm install',
task: () => execa('npm', ['install'])
},
{
title: 'Adding package-lock to git',
task: (ctx, task) =>
execa('git', ['add', 'package-lock.json'])
.catch(() => task.skip())
}
]).run();
当您有一个长时间运行的任务并返回 Promise(例如execa
的调用npm install
)时, Listr会为您提供加载状态。
还可以使用 Observables 显示变化的消息,有关更多信息,请参阅Listr 文档
可执行 JavaScript 文件🦅
理想的情况是能够使用./index.js
而不是来执行我们的脚本node index.js
。
为此,我们需要该文件在 UNIX 系统上可执行:chmod +x
。因此
chmod +x index.js
然后我们需要告知系统应该如何尝试运行该文件,即使用以下 hashbang:
#!/usr/bin/env node
如果我们将其添加到index.js
我们得到:
#!/usr/bin/env node
const execa = require('execa');
const Listr = require('listr');
new Listr([
{
title: 'Removing package-lock',
task: () => execa('rm', ['package-lock.json'])
},
{
title: 'Running npm install',
task: () => execa('npm', ['install'])
},
{
title: 'Adding package-lock to git',
task: (ctx, task) =>
execa('git', ['add', 'package-lock.json'])
.catch(() => task.skip())
}
]).run();
我们现在可以使用以下命令运行:
./index.js
添加软件包二进制文件
npm 有一个bin
字段,我们可以像下面这样使用(在package.json
):
{
"name": "beautiful-cli",
"version": "1.0.0",
"description": "A simple CLI",
"main": "index.js",
"bin": {
"fix-package-json": "./index.js"
}
"dependencies": {
"execa": "^0.10.0",
"listr": "^0.14.1"
}
}
发布到 npm
尽管使用np 包,这还是留给读者作为练习,
但它非常简单。
提示:npx np
在您尝试发布的任何包中运行
您可以在此处找到完整的软件包:https://github.com/HugoDF/fix-package-lock并使用 运行它npx fix-package-lock
。
订阅即可在您的收件箱中获取最新帖子(抢在其他人之前)。
文章来源:https://dev.to/hugo__df/how-to-make-beautiful-simple-cli-apps-with-node-c1b