引导您的内部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 install的execa调用),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 。