详解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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
微信小程序实现全国机场索引列表
Jan 31 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 Javascript
详解如何在JS代码中消灭for循环
Dec 11 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+ajax实现无刷新分页
2015/11/18 PHP
php中的登陆login实例代码
2016/06/20 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
Django中的forms组件实例详解
2018/11/08 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python调用C语言程序方法解析
2020/07/07 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
护理专业优质毕业生自荐书
2014/01/31 职场文书
小学课外活动总结
2014/07/09 职场文书
安全保证书怎么写
2015/02/28 职场文书
护理工作个人总结
2015/03/03 职场文书
回复函范文
2015/07/14 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
java基础——多线程
2021/07/03 Java/Android
Ajax实现异步加载数据
2021/11/17 Javascript
带你了解Java中的ForkJoin
2022/04/28 Java/Android