详解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 相关文章推荐
uploadify 3.0 详细使用说明
Jun 18 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
Javascript Objects详解
Sep 04 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
AngularJS Module方法详解
Dec 08 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
在vue中使用setInterval的方法示例
Apr 16 Javascript
JavaScript实现4位随机验证码的生成
Jan 28 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的单引号和双引号 字符串效率
2009/05/27 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
学生实习介绍信
2014/01/15 职场文书
20年同学聚会感言
2014/02/03 职场文书
总经理工作职责范文
2014/03/14 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
求职自我评价范文100字
2014/09/23 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
公司老总年会致辞
2015/07/30 职场文书