前言
使用nodejs打造cli工具
- 本文意指通过实现一个简单的cli工具来了解nodejs可执行程序,而不是工程化具体的实现
- 本文适合node新人小白,以及学了nodejs却不知道该做点什么的同学
项目先体验
先看看我做了什么,再来学习怎么做,目前我已经将工具发布到npm,快人一步抢先体验
在任意路径中打开终端输入:
npx @singh-liu/zlib-file -h
可以看到终端提示了对应的命令,zlib-file 就是用来压缩和解压文件的工具。如果你执行了对应的命令,终端将与你进行问答式的交互命令,最终根据你输入的结果执行命令
可执行的node程序
不管你是在终端中运行node xxx.js或者是webpack, creat-react-app等。首先这是执行在shell脚本,如果我们很随意的输入不存在的命令,那么终端会提示你这不是内部或外部命令,也不是可运行的程序。
nodejs在安装的时候就为我们配置好了PATH 环境变量,这允许我们在任意位置执行node xxx,所以实现node程序的第一步是创建一个全局的命令并向shell脚本解释我们应用的程序是nodejs,具体实现写在实践中~
项目实践
项目初始化
首先我们来新建一个文件取名myzlib,然后在该目录内打开终端初始化npm
执行命名 npm init -y 得到package.json文件
执行命令npm link
npm link允许我们以软链接的方式创建本地包和全局包之间创建符号链接,执行完毕后你可以在系统目录中找到对应文件(window下如图)
虽然链接上来了,当此时myzlib仍然不是全局命令,也不是可执行的程序。
先说可执行程序
如果软件包是可执行文件,该怎么办?
在这种情况下,它会把可执行文件放到 node_modules/.bin/ 文件夹下。
验证这一点的简单示例是 cowsay。
当使用 npm install cowsay 安装软件包时,它会在 node_modules 文件夹中安装自身以及一些依赖包:
如何执行这些文件?
可以输入 ./node_modules/.bin/cowsay 来运行它
npx cowsay ‘holle’
packge.json文件允许我们配置指定的bin文件,作为可执行文件
// packge.js 添加如下代码
{
"bin": {
"myzlib": "./bin/cli.js"
},
}
新建bin/cli.js
// bin/cli.js
#!/usr/bin/env node
console.log("Hello World !")
你显式地告诉 shell 使用 node 运行你的脚本。 您也可以使用 “shebang” 行将此信息嵌入到 JavaScript 文件中。 “shebang” 是文件的第一行,它告诉操作系统使用哪个解释器来运行脚本。 以下是 JavaScript 的第一行
#!/usr/bin/node
以上,我们显式地给出了解释器的绝对路径。 并非所有操作系统的 bin 文件夹中都有 node,但都应该有 env。 您可以告诉操作系统使用 node 为参数运行
#!/usr/bin/env node
重新执行一遍 npm link
在任意位置打开cmd输入myzlib都能够运行文件输出"Hello World !"
这个时候我们再看系统路径
其中myzlib.cmd作为全局的命令脚本,其内容指向了可执行程序bin/cli.js
这些都是npm link帮我们生成的
总结
整个cli的运行链路由全局命令脚本
指向可执行文件
可执行文件再由“shebang”告诉操作系统使用nodejs来运行脚本
项目初始化讲完就没了?
是的时间关系不想讲了,如果你已经成功输出"Hello World !"那么只需要clone一下我的代码就能学会了
https://gitee.com/liu_xin-1995/zlibfile/tree/master