前端必备,从零开始完成一个node命令行工具
前端必备,从零开始完成一个node命令行工具
前言
node.js 作为一种服务器语言,其拥有很多底层操作的api,比如文件写入,http服务器等模块。同时其语法和js几乎一直,所以作为前端的我们,可以运用这些东西帮助解决一些开发中的实际问题。
前置知识
- 每当shell新开启一个会话时,shell都会生成environment即环境变量,environment里都是些定义系统属性的变量。命令行输入 env即可查看环境变量
很多程序都会用到这里的变量,比如nvm会用这里的NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
作为代理服务器地址,去镜像的源下载node来安装,提高速度
查看全局包安装在哪里
npm root -g
当我们shell里执行
node x.js --args
,args可以通过 process.argv 来访问,process.argv[0]固定是node本身路径,process.argv[1]是文件路径,process.argv.slice(2)才是我们输入的参数
node工具如何创建
首先创建一个文件
mkdir test
cd test
进入文件夹初始化我们的项目
npm init
,一路回车就好,此时应该有一个 package.json 的文件用一款你喜欢的开发工具打开test文件夹
此时你看到的应该是这样
到这里就算项目创建好啦~
如何配置命令
对 node 项目而言,模块导出入口文件由 package.json 的 main 字段指定
而如果是要安装到命令行的工具,则是由 package.json 的 bin 字段指定。
首次创建的package.json文件应该长成这样(如果你是一路按回车键的话)
然后我们应该给它配置一个bin字段,如下所示
这个的意思是,我们创建了一个
test-abc
命令,当你输入这个命令的时候,执行同级目录下的
index.js
文件。
所以我们现在就需要在index.js文件下写我们需要的代码逻辑
正式开发工具
创建index.js文件。现在的文件结构应该是:
在index.js中写下:
#!/usr/bin/env node
console.log("test-abc");
第一行是脚本声明文件。任何以 shebang line(#!)
开头的文件即是可执行的脚本,其中shebang line指定了用什么(解释器)来解释执行脚本
比如常见的 python 脚本,你可以看到第一行是这样的:
#!/usr/bin/env python
对 node.js 来说,shebang line通常这么写:
#!/usr/bin/env node
Shebang是为了指定脚本的解释程序,可是不同用户或者不同的脚本解释器有可能安装在不同的目录下,系统如何知道要去哪里找你的解释程序呢? /usr/bin/env 就是告诉系统可以在PATH目录(即 /usr/bin/env )中查找。所以配置#!/usr/bin/env node, 就是解决了不同的用户node路径不同的问题,可以让系统动态的去查找node来执行你的脚本文件。
如何执行node命令
直接命令行输入我们定义的命令名称就好啦。这里我们定义的test-abc ,所以直接输入test-abc就好啦~
然后我们测试一下,在终端中输入 kid,会提示:
zsh: command not found: kid
为什么会这样呢?回想一下,通常我们在使用一个 cli 工具时,都需要先安装它,比如 vue-cli,使用前需要全局安装:
npm i vue-cli -g
而我们的 kid-cli 并没有发布到 npm 上,当然也没有安装过了,所以终端现在还不认识这个命令。通常我们想本地测试一个 npm 包,可以使用:npm link 这个命令,本地安装这个包,我们执行一下:
npm link
然后再执行
test-abc
就会看输出 ‘test-abc‘ 啦