详解Node.js如何开发命令行工具


Posted in Javascript onAugust 14, 2016

前言

Node 给前端开发带来了很大的改变,促进了前端开发的自动化,我们可以简化开发工作,然后利用各种工具包生成生产环境。如运行sass src/sass/main.scss dist/css/main.css即可编译 Sass 文件。

在实际的开发过程中,我们可能会有自己的特定需求,

那么我们得学会如何创建一个Node命令行工具。

hello world

老规矩第一个程序为hello world。在工程中新建bin目录,在该目录下创建名为helper的文件,具体内容如下:

#!/usr/bin/env node

console.log('hello world');

修改helper文件的权限:

$ chmod 755 ./bin/helper

执行helper文件,终端将会显示hello world

$ ./bin/helper
hello world

符号链接

接下来我们创建一个符号链接,在全局的node_modules目录之中,生成一个符号链接,指向模块的本地目录,使我们可以直接使用helper命令。

在工程的package.json文件中添加bin字段:

{
 "name": "helper",
 "bin": {
 "helper": "bin/helper"
 }
}

在当前工程目录下执行npm link命令,为当前模块创建一个符号链接:

$ npm link

/node_path/bin/helper -> /node_path/lib/node_modules/myModule/bin/helper
/node_path/lib/node_modules/myModule -> /Users/ipluser/myModule

现在我们可以直接使用helper命令:

$ helper
hello world

commander模块

为了更高效的编写命令行工具,我们使用TJ大神的commander模块。

$ npm install --save commander

helper文件内容修改为:

#!/usr/bin/env node

var program = require('commander');

program
 .version('1.0.0')
 .parse(process.argv);

执行helper -hhelper -V命令:

$ helper -h

 Usage: helper [options]

 Options:

 -h, --help  output usage information
 -V, --version output the version number

$ helper -V
1.0.0

commander模块提供-h, --help-V, --version两个内置命令。

创建命令

创建一个helper hello <author>的命令,当用户输入helper hello ipluser时,终端显示hello ipluser。修改helper文件内容:

#!/usr/bin/env node

var program = require('commander');

program
 .version('1.0.0')
 .usage('<command> [options]')
 .command('hello', 'hello the author') // 添加hello命令
 .parse(process.argv);

bin目录下新建helper-hello文件:

#!/usr/bin/env node

console.log('hello author');

执行helper hello命令:

$ helper hello ipluser
hello author

解析输入信息

我们希望author是由用户输入的,终端应该显示为hello ipluser。修改helper-hello文件内容,解析用户输入信息:

#!/usr/bin/env node

var program = require('commander');

program.parse(process.argv);

const author = program.args[0];

console.log('hello', author);

再执行helper hello ipluser命令:

$ helper hello ipluser
hello ipluser

哦耶,终于达到完成了,但作为程序员,这还远远不够。当用户没有输入author时,我们希望终端能提醒用户输入信息。

提示信息

helper-hello文件中添加提示信息:

#!/usr/bin/env node

var program = require('commander');

program.usage('<author>');

// 用户输入`helper hello -h`或`helper hello --helper`时,显示命令使用例子
program.on('--help', function() {
 console.log(' Examples:');
 console.log(' $ helper hello ipluser');
 console.log();
});

program.parse(process.argv);
(program.args.length < 1) && program.help(); // 用户没有输入信息时,调用`help`方法显示帮助信息

const author = program.args[0];

console.log('hello', author);

执行helper hellohelper hello -h命令,终端将会显示帮助信息:

$ helper hello

 Usage: helper-hello <author>

 Options:

 -h, --help output usage information

 Examples:
 $ helper hello ipluser

$ helper hello -h

 Usage: helper-hello <author>

 Options:

 -h, --help output usage information

 Examples:
 $ helper hello ipluser

总结

到此我们编写了一个helper命令行工具,并且具有helper hello <author>命令。刚兴趣的朋友们快快自己动手实践起来,只有自己做了才能算真正的学习了,希望本文对大家能有所帮助。

Javascript 相关文章推荐
window.ActiveXObject使用说明
Nov 08 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
May 12 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
Dec 13 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
jquery获取select,option所有的value和text的实例
Mar 06 Javascript
Angular中使用MathJax遇到的一些问题
Dec 15 Javascript
JS实现省市县三级下拉联动
Apr 10 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 Javascript
javascript中的 object 和 function小结
Aug 14 #Javascript
JavaScript兼容浏览器FF/IE技巧
Aug 14 #Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 #Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 #Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 #Javascript
漂亮! js实现颜色渐变效果
Aug 12 #Javascript
jQuery ztree实现动态树形多选菜单
Aug 12 #Javascript
You might like
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php以post形式发送xml的方法
2014/11/04 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
13个PHP函数超实用
2015/10/21 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
VUE写一个简单的表格实例
2019/08/06 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
企业后勤岗位职责
2014/02/28 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
二婚主持词
2015/06/30 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js