如何使用Node制作美观,简单的CLI应用程序

引导您的内部Sindre Sohrus,并使用Node运送精美简单的CLI应用程序。

命令行应用程序是打包重复性任务的一种巧妙方法。 这将引导您完成一些对构建CLI应用程序有用的工具。

  • 这个主意💡
  • 管道到命令行🚇
  • 处理顺序动作✨
  • 可执行的JavaScript文件🦅
  • 添加软件包二进制文件📦
  • 发布到npm🚀

这是上周一与雨果通讯在《守则》上发出的。 订阅即可在您的收件箱中(在其他任何人之前)获取最新的帖子。

合并/重新设置基准时,似乎总是引起麻烦的文件是程序包锁定。 我们将介绍如何制作一个简单的实用程序,该实用程序删除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')。然后(结果=> console.log(result.stdout));节点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([
{
标题:“移除包裹锁”,
任务:()=> execa('rm',['package-lock.json'])
},
{
标题:“正在运行npm install”,
任务:()=> execa('npm',['install'])
},
{
标题:“将包锁添加到git”,
任务:(ctx,任务)=>
execa('git',['add','package-lock.json'])
.catch(()=> task.skip())
}
])。跑();

现在, node index.js的输出如下所示:

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

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

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

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

  chmod + x index.js 

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

  #!/ usr / bin / env节点 

如果将其添加到index.js我们将获得:

  #!/ usr / bin / env节点 
const execa = require('execa');
const Listr = require('listr'); new Listr([
{
标题:“移除包裹锁”,
任务:()=> execa('rm',['package-lock.json'])
},
{
标题:“正在运行npm install”,
任务:()=> execa('npm',['install'])
},
{
标题:“将包锁添加到git”,
任务:(ctx,任务)=>
execa('git',['add','package-lock.json'])
.catch(()=> task.skip())
}
])。跑();

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

  ./index.js 

npm有一个bin字段,我们可以像下面那样使用它(在package.json ):

  { 
“ name”:“ beautiful-cli”,
“ version”:“ 1.0.0”,
“ description”:“简单的CLI”,
“ main”:“ index.js”,
“ bin”:{
“ fix-package-json”:“ ./index.js”
}
“依赖关系”:{
“ execa”:“ ^ 0.10.0”,
“ listr”:“ ^ 0.14.1”
}
}

尽管使用了np软件包,但是这非常简单,这留给读者作为练习。

提示:在您要发布的任何程序包中运行npx np

您可以在以下位置找到完整的软件包:https://github.com/HugoDF/fix-package-lock并使用npx fix-package-lock运行它。

这是上周一与雨果通讯在《守则》上发出的。 订阅即可在您的收件箱中(在其他任何人之前)获取最新的帖子。


最初于 2018 年6月20日 发布在 codewithhugo.com