前言
来啦老铁!
还记得之前 Python 下学过一个好用的模块 Fire,关于 Fire 模块的简介是:
-
Python Fire 是 Google 开源的一个可从任何 Python 代码自动生成命令行接口(CLI)的库。
对 Fire 模块的介绍有兴趣的小伙伴可以移步至:Python 命令行工具库:Fire。
而笔者平时工作用的语言是 typescript,或者也可以说是 Node.js,过去想要在脚本中访问命令行中的参数,往往使用环境变量的方式,如访问命令行中 export 的 SITE_ENV 环境参数,则使用:
process.env.SITE_ENV
这种方式比较笨重,而且可能不同操作系统可能会遇到奇葩问题,如环境变量大小写等问题。
由于某些机缘巧合,需要使用类似于 Python 的 Fire 模块的功能,因此经过摸索后,发现这样一个模块:
-
js-fire 模块
js-fire 模块可以实现与 Python Fire 模块一样的效果!npm 地址:https://www.npmjs.com/package/js-fire
学习路径
- 安装 js-fire 模块;
- 使用 js-fire 进行编程;
- 使用命令行接口;
- js-fire 彩蛋;
1. 安装 js-fire 模块;
- 在项目内执行以下命令:
npm install js-fire --save-dev
2. 使用 js-fire 进行编程;
- 我们直接使用官方的例子进行学习即可(假设我们的 js 文件叫 demo.js):
const fire = require('js-fire');
const calculator = {
__description__: 'I am a math machine',
double: number => {
// I double things
return 2 * number
},
add: (n1 = Math.PI, n2) => {
return n1 + n2
},
misc: {
year: () => '1999',
brand: () => 'casio',
hello: name => `hello ${name}`,
},
}
fire(calculator);
- 简要说下,我们声明了 double 方法、add 方法、misc 方法组,misc 方法组内有 year 方法、brand 方法、hello 方法;
3. 使用命令行接口;
1). 使用 double 方法:
node demo.js double --number=2
执行结果如下:
2). 使用 add 方法:
node demo.js add --n1=2 --n2=3
执行结果如下:
n1 有默认值为 Math.PI,因此也可以使用其默认值,如:
node demo.js add --n2=3
此时,执行结果如下:
3). 使用 misc 方法组内的方法:
node demo.js misc year
执行结果如下:
node demo.js misc brand
执行结果如下:
node demo.js misc hello --name=dylan
执行结果如下:
由此可见,我们用 js-fire 模块实现了类似于 Python Fire 模块的自动生成命令行接口(CLI)的功能,这样的功能很优雅、灵活~
4. js-fire 彩蛋;
有趣的是,js-fire 还为我们准备了一个彩蛋,即:
- js-fire 可以直接在命令行直接使用大多数 js 模块,例如,我们使用非常常见的 fs 模块中的 writeFileSync 方法,创建一个 hello.txt 文件,并向 hello.txt 文件写入 hiii 字符串,则不需要任何 js 代码,可以直接用 js-fire 模块完成:
npx js-fire fs -- writeFileSync --path=hello.txt --data="hiii"
执行后效果如下:
当然,当我们不知道一个模块有什么方法可以用时,还可以用这样的方式去查询:
npx js-fire fs -- -h
当看到这个功能,我情不自禁的说:哇~
不用一行 js 代码,就能使用简单的模块去完成一些相对简单的任务,有点香啊~
能力有限,欢迎指正、互相交流,感谢~
如果本文对您有帮助,麻烦点赞、关注!
感谢~