今年搬进新家之后,供暖的第一年暖气各种问题。供暖后,家里一直不暖和,在家办公还要穿棉裤,是怎么样的一个体验? 和供暖公司沟通后,第一次上门检查无果;第二次说是入口流量太慢,换了热水阀,热水流量没问题了,但是温控阀总是自动关闭,物业推给热力,热力推给温控阀厂家,温控阀厂家周末打电话没人接。真想送给相关单位一面锦旗「制冷先锋」。爱人和我吐槽,这个冬天我们靠一身的浩然正气也可以扛的过去。 我已经感冒一周了,上了年纪身体素质就是不行。
😄习惯了翻译稿前加点碎碎念,勿怪。 这篇是介绍如何用Node 写一个CLI工具,扫了一遍,简单几分钟上手,可以封装一些常用的脚本,成为自己提高效率的小工具箱。 原文: How to make beautiful, simple CLI apps with Node - DEV Community 👩💻👨💻
命令行应用以一种优雅的方式去处理整合一些重复的任务,这篇文章将引导你创建一个CLI应用,整合一些实用的命令行小工具。
大纲:
- 想法 💡
- 命令行输入 🚇
- 处理顺序动作✨
- 可执行的JavaScript 文件🦅
- 发布到 npm 🚀
萌生想法 💡
当merge/rebase, package-lock 文件的冲突是真滴烦。我们来聊聊如何整些实用的小技巧来删除package-lock.json,通过npm install 再创建它,并把它添加到git 索引。
你可以这个链接找到这个方法 GitHub - HugoDF/fix-package-lock: Fix package-lock.json by regenerating it
安装后 执行 npx fix-package-lock
来预览下最后的结果。
命令行输入 🚇
开始我们利用来自Sindre Sohrus的execa
号称「更好的子线程」,安装这个模块:
npm i execa -S
创建index.js
const execa = require(‘execa');
execa(‘ls’).then(result => console.log(result.stdout));
执行node index
, 在命令行中会看见如下文件信息
node index.js
index.js
node_modules
package-lock.json
package.json
处理顺序动作✨
在生成 package-lock
文件,我们需要先删除它,然后执行 npm i
生成它。到这我们可以使用 Listr,它可以让我们这样处理刚才描述的任务
执行 npm i listr -S
然后修改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()
现在执行node index
有如下效果
当你执行一个长时间的任务,Listr 给你一种loading状态,返回一个 Promise。体验类似你通过 npm install 安装 execa
还可以显示使用Observables更改的消息,有关更多信息,请参阅Listr文档
可执行的JavaScript 文件🦅
比较理想的情况是直接执行./index.js
, 而不是node index.js
, 为了实现它 我们执行 chmod +x
让它在UNIX系统变成可执行文件
chmod +x index.js
然后,我们需要添加文件头通知系统应如何尝试运行该文件:
#!/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
在package中添加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 这个包发布到npm ,np 真滴是超级好用
提示:在您要发布的任何程序包中运行npx np
你可以看到完整的代码 https://github.com/HugoDF/fix-package-lock