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 只是做了一个软链而已。它指向你包的目录。

posted @ 2016-03-21 19:13  篮球不止是个球  阅读(576)  评论(0编辑  收藏  举报