详解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 相关文章推荐
jQuery代码优化 遍历篇
Nov 01 Javascript
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
基于JS实现仿百度百家主页的轮播图效果
Mar 06 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
实例讲解javascript实现异步图片上传方法
Dec 05 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
微信小程序中显示倒计时代码实例
May 09 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
梳理一下vue中的生命周期
Dec 30 Vue.js
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/02/06 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python验证企业工商注册码
2015/10/25 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
信用社主任竞聘演讲稿
2014/05/23 职场文书
课例研修方案
2014/05/31 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
答谢酒会主持词
2015/07/02 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript