从零实现一个命令行工具
介绍:
本教程将带你从零实现一个命令行工具(command-line interface),对于你可能不理解的关键点,引(wo)入(xiang)外(tou)链(lan)让你“恍然大悟”。
具体实现效果如下:
实现一个简单的命令行工具
1.初始化和设置ShaBang
创建项目,在终端cd到当前路径,通过npm init
之后,目录中创建index.js
index.js
#! /usr/bin/env node
console.log('hello cli')
然后,修改index.js的权限:
chmod 755 index.js
这样我们就能简化node index.js
这个命令,而变成:
./index.js
这里会输出“hello cli”
注意这里不要写成~~
index.js
和./index
~~,不然无效。
#! /usr/bin/env node
这是SheBang/HashBang,用于指定用node执行脚本文件。
2.修改package.json文件
在package.json
文件中添加bin
字段:
"bin": {
"hello": "./index.js"
}
hello
就是命令名,./index.js
就是地址。
执行npm link
命令,把命令和路径进行连接,命令行提示如下:
junking@JunkingdeMacBook-Pro-3973 node实现命令行工具 % npm link
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN node-cli-demo@1.0.0 No repository field.
up to date in 0.964s
/Users/junking/.npm-global/bin/hello -> /Users/junking/.npm-global/lib/node_modules/node-cli-demo/index.js
/Users/junking/.npm-global/lib/node_modules/node-cli-demo -> /Users/junking/WebstormProjects/node实现命令行工具
这下,我们可以使用更简洁的命令了:
hello
顺便告诉你,你现在可以在终端的路径执行hello
命令了,不信你试试?
npm link用来在本地项目和本地npm模块之间建立连接,可以在本地进行模块测试。
其实到此位置,一个简单的命令行工具已经完成了,因为你可以执行hello命令来输出一段文字了。
升级!俺是一个实用性的命令行工具!
简化npm源的切换
发布过npm包的开发者应该都经历过,在npm中设置淘宝源可以加速下载速度,但是不能执行npm publish
来发布包。或许有你们像我一样经常进行繁琐的切换,那么长的命令还记不住。
现在,我们将这些简化到命令行工具中:
我已经将这个工具做好了,已经发布到npm中,下面开始使用吧!
npm install -g junking@1.1.0
命令:
junking npm源 设置npm源为官方源
junking taobao源 设置npm源为淘宝源
junking publish 发布包到npm官方
使用这些命令后,就不用再每次都来回地切换npm源啦!
具体的实现原理就是,通过node的child_process.exec()来执行对应的控制台命令,然后将命令封装起来,并利用yargs来配置命令行参数等等。
我觉得这个过程还是留给你自己来实现吧,思路已经告诉你了,自己动手实现印象深刻,如果仍有困难请在评论区留言,再决定是否要把分步步骤详细呈上。