详解Node.js如何开发命令行工具
作者:daisy 发布时间:2024-05-05 09:21:19
前言
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 -h
和helper -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 hello
或helper 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>命令。刚兴趣的朋友们快快自己动手实践起来,只有自己做了才能算真正的学习了,希望本文对大家能有所帮助。


猜你喜欢
- 出于工作需要,学习了GAN,原理这块就不多讲了,主要讲怎么训练自己的数据生成新的图片,因为博客上大多是生成MNIST数据集,生成自己的图片时
- Numpy随机矩阵: np.random.randn(d0, d1, d2, ...)矩阵大小与形状: np.ndarray.size 与
- 引入依赖#?导入模块import?pymysqlimport?pandas?as?pdimport?numpy?as?npimport?ti
- Mysql的Bin log数据恢复:不小心删除数据库前言:因为不小心删除了测试机器上Mysql的一整个数据库Schema,因为是测试机所以没
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&
- 设计页面时,经常会从一个页面打开一个子窗口以供浏览者查看。通常,这种子窗口中的内容一经浏览者看过,对于浏览者而言就不再需要,而他们常常会忘记
- 前言: 做过游戏开发的人都知道,端游可以用c++,页游可以用sl或者as3,鉴于这段时间一直在看网页游戏开发的知识,所以关于游戏开发,我有一
- 在机房收费系统中,有几处这样的情况:起始日期和终止日期,相信聪明的你肯定可以想象出为什么要有两个日期控件!是的,就是从一张表中查找出在这两个
- 本文实例讲述了Python2.7中SQLite3基本操作方法。分享给大家供大家参考,具体如下:1、基本操作# -*- coding: utf
- 如何做一个只搜索本网站的引擎? 用下面两个文件即可实现:searchfiles.html &l
- 一、简介urllib.request.urlopen()函数用于实现对目标url的访问。函数原型如下:urllib.request.urlo
- 1、settings.INSTALLED_APPS下添加:django.contrib.staticfiles2、settings.py下添
- 前言最近在学习python,发现一个微信自动发消息的小demo感觉很有意思,试了一下,不成功,因为demo中用的是itchat这个库来操作微
- 1.VUE验证邮箱export const isEmail = (s) => { return /^([a-
- 本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php数组查询元素位置的方法:方法1:利用array_search(
- Python 条件语句Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。可以通过下图来简单了解
- 我就废话不多说了,大家还是直接看代码吧~# -*- coding: utf-8 -*-#keras==2.0.5#tensorflow==1
- 模块a.py 想用 b.py中公有数据 cntb的python文件#!/usr/bin/env python# coding:utf8fro
- 首先交代一下运行环境和工具版本:WIN10MINGW64ORACLEINSTANCCLIENT_18_3 x64Jetbrins Golan
- 这篇文章主要介绍了python的time模块和datetime模块实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参