npm一般被用作管理Javascript相关的模块,它同时也提供了『bin』的功能,即安装某模块之后,自动在系统中设置命令行工具。
所以我们就可以拿它来管理命令行工具。
因为npm只特殊对待头部带有#!/usr/bin/env node
的脚本,将其转为Node运行。其它的都是直接执行,所以我们就可以随便放一些Shell脚本、Perl脚本甚至二进制包到它的里面,并将其作为一个安装工具来使用。
以一个简单的命令 du -sh * | sort -rh
为例,因为我经常记不住这个命令,所以想抽取一个别名dusort
。虽然只需要在shell配置中加个函数或别名就好了,但是这样不方便同步和分享。
像这种情况,我们就可以写一个简单的npm包来实现便捷的安装和分发了。
首先,写一个脚本 dusort.sh
#!/bin/sh
du -sh * | sort -rh
再给其加上可执行权限:
chmod a+x ./dusort.sh
再n初始化一个npm包
npm init
得到一个如下的package.json文件
{
"name": "dusort",
"version": "1.0.0",
"description": "du -sh * | sort -rh",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/banyudu/dusort.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/banyudu/dusort/issues"
},
"homepage": "https://github.com/banyudu/dusort#readme"
}
在它的内部添加一个bin配置:
{
"bin": {
"dusort": "./dusort.sh"
}
}
最后执行
npm publish
命令进行发布
这样就搞定了。
使用的时候,既可以免安装执行:
npx dusort
也可以先安装再执行
npm i -g dusort
dusort
一个方便易用的命令就配置完成了。