如何使用 Node 制作美观、简单的 CLI 应用

2025-05-27

如何使用 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));
Enter fullscreen mode Exit fullscreen mode
node index.js
index.js
node_modules
package-lock.json
package.json 
Enter fullscreen mode Exit fullscreen mode

处理连续动作✨

要重新生成,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();
Enter fullscreen mode Exit fullscreen mode

现在的输出node index.js如下所示:
原始 `node index.js` endraw 输出


当您有一个长时间运行的任务并返回 Promise(例如execa的调用npm install)时, Listr会为您提供加载状态。

还可以使用 Observables 显示变化的消息,有关更多信息,请参阅Listr 文档

可执行 JavaScript 文件🦅

理想的情况是能够使用./index.js而不是来执行我们的脚本node index.js

为此,我们需要该文件在 UNIX 系统上可执行:chmod +x。因此

chmod +x index.js
Enter fullscreen mode Exit fullscreen mode

然后我们需要告知系统应该如何尝试运行该文件,即使用以下 hashbang:

#!/usr/bin/env node
Enter fullscreen mode Exit fullscreen mode

如果我们将其添加到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();
Enter fullscreen mode Exit fullscreen mode

我们现在可以使用以下命令运行:

./index.js
Enter fullscreen mode Exit fullscreen mode

添加软件包二进制文件

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

发布到 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
PREV
终极 React 资源
NEXT
我正在培养的 6 个新习惯,以提升我作为初级开发人员的水平