Nodejs 如何制作命令行工具
# 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦![options] <package> Commands: resume|rs [options] [cmd] 这里是我的简历详情! Options: -h, --help output usage information -V, --version output the version number # 输出子命令帮助 $ xxxb rs -h Usage: resume|rs [options] [cmd] 这里是我的简历详情! Options: -h, --help output usage information -b, --basicinfo [type] 基本信息 -e, --education [type] 教育经历 basicinfo 说明: preview 预览简历 -b, --basicinfo 基本信息 name : 名字 height : 身高 dateOfBirth : 出生日期 workExperience : 工作经验 mobile : 手机号码 telephone : 电话号码 email : 邮箱地址 residency : 居住地点 currentSituation : 现状 currentCity : 当前城市 nation : 国家 region : 地区 postalCode : 邮编地址 ID : 身份证ID website : 个人网赚 maritalStatus : 婚姻状况 politicalStatus : 政治面貌 -e, --education 教育经历
在使用 Nodejs
过程中,有很多包都支持全局安装,提供一个命令,然后在命令行我们就可以完成一些任务。有时候我们也需要开发这样的命令工具。在Node.js
中发现弄个命令行工具特别轻松,我来学习如何使用 Node.js
生成自己的command命令,在未来的项目中方便自己。
-
先弄个小实例感受一下命令行的魅力
-
再用命令行实现输出自己的简历(我觉得这个可能很有趣)
-
常用的命令加入进来
-
ls 查看当前目录
-
ls -a 包括隐藏文件
-
打开当前目录
-
-
就先这么计划着吧。
小实例
开始编写之前需要确认的一件事情是你已经安装了Node.js。你可以在命令行中运行 which node
来确认是否已经安装,或者运行 node -v
查看 node 的版本 。如果你已经安装了node,你可以看到类似于下面的输出结果,一般情况安装了node.js 顺带npm工具自动安装了。
$ which node /usr/local/bin/node $ node -v v4.3.1
创建目录
首先任意创建一个文件夹,初始化 package.json
文件,在该文件夹下创建bin目录:
$ mkdir xxxb #创建一个文件夹 $ cd xxxb && mkdir bin $ npm init #初始化 'package.json' 文件
编写命令行
cd到 bin
目录下,新建一个 xxxb.js
文件(名字自取),编写如下代码,在js文件顶部加上 #!/usr/bin/env node
这段代码:
#!/usr/bin/env node var fs = require("fs"), path = process.cwd(); var run= function (obj) { if(obj[0] === '-v'){ console.log('version is 1.0.0'); }else if(obj[0] === '-h'){ console.log('Useage:'); console.log(' -v --version [show version]'); }else{ fs.readdir(path, function(err, files){ if(err){ return console.log(err); } for(var i = 0; i < files.length; i += 1){ console.log(files[i]); } }); } }; //获取除第一个命令以后的参数,使用空格拆分 run(process.argv.slice(2));
上面的 #!/usr/bin/env node
被成为 shebang(Shebang是一个由井号和叹号构成的字符串行)
,表示用后面的路径所示的程序来执行当前文件夹。还需要一个 package.json
文件
{ "name": "wcj", "version": "1.0.0", "description": "xxxb ---", "repository": { "type": "git", "url": "xxxb" }, "main": "index.js", "bin": { "xxxb": "xxxb/wcj.js" }, "author": "xxxb ", "license": "MIT" }
运行 node bin/xxxb.js
会显示当前文件夹下的所以文件和文件夹名。这个玩意儿真的跑起来了。更多npm link的信息请查看
package.json
文件中 bin
里面的内容表示这个字段将 xxxb
命令映射到了你的 bin/xxxb.js
脚本。bin参考
此工具采用 npm版本号采用的 semver 规则
"bin": { "xxxb": "bin/xxxb.js" }
全局运行命令调试
确保你在 package.json 文件中添加了 bin 节点。然后打开命令了工具进入 xxxb 目录
install
如果在项目目录下运行没有问题,可以将当前目录模块安装到全局,也可以采用此方法来更新你的命令行工具
sudo npm install . -g
link
或者目录输入 npm link
会自动添加全局的 symbolic link
,然后就可以使用自己的命令了。
$ xxxb #README.md #bin #package.json $ cmd -v # version is 1.0.0 $ cmd -h #Useage: # -v --version [show version]
发布到线上
添加用户
按照提示输入用户名,密码和邮箱
npm adduser
登陆用户
按照提示输入用户名,密码和邮箱
npm login
发布
npm publish
如果不带参数,则会在当前目录下查找package.json文件,按照该文件描述信息发布;
注:
npm link
安装到全局之后,在你要使用的项目中,npm link 包的名字
,你再去更改你的包,自动更新的,如果你全局安装,不在你的项目中使用,也是自动更新的,npm link
只是做了一个软链而已。它指向你包的目录。