利用node.js制作命令行工具方法教程(一)


Posted in Javascript onJune 22, 2017

前言

之前使用过一些全局安装的NPM包,安装完之后,可以通过其提供的命令,完成一些任务。比如Fis3,可以通过fis3 server start 开启fis的静态文件服务,通过fis3 release开启文件编译与发布;还有vue-cli,可以通过vue init webpack my-project来初始化vue+webpack的项目基础配置。最近有一个需求,需要写一个类似vue-cli的NPM包,通过命令行操作实现项目初始配置,所以就查看了相关资料,学习了一下如何使用node来生成自己的命令。

编写命令行

命令的目标:在当前目录下开启一个静态文件服务,端口号为8085

1.创建目录

构成命令的基础是需要一个命令文件web.js和package.json配置文件,执行以下命令:

$ mkdir node-commander #创建一个文件夹

$ cd node-commander && mkdir bin

$ npm init #初始化package.json文件<br>$ cd bin && touch web.js #创建命令文件

2.命令文件 

#!/usr/bin/env node

 

var express = require('express');

var path = process.cwd();

 

function run(argv) {

 if (argv[0] === '-v' || argv[0] === '--version') {

 console.log('version is 1.0.0');

 }

 else if (argv[0] === '-h' || argv[0] === '--help') {

 console.log('usage:\n');

 console.log('-v --version [show version]')

 }

 else if (argv[0] === '-s' || argv[0] === '--start') {

 var app = new express();

 app.use('/static', express.static(path));

 app.listen(8085, function () {

 console.log('server start at port 8085');

 });

 }

}

 

run(process.argv.slice(2)); 

文件的头部务必加入#!/usr/bin/env node这行代码,这里表示使用node作为脚本的解释程序,node的路径通过env来查找,可以避免node安装路径不一带来的问题。

其中process为node进程中的全局变量,process.argv为一数组,数组内存储着命令行的各个部分,argv[0]为node的安装路径,argv[1]为主模块文件路劲,剩下为子命令或参数,如下:

node ./bin/web.js a b c

# process.argv的值为[ '/usr/local/bin/node', '/PATH/web.js', 'a', 'b', 'c' ]

3.命令配置

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

"bin": {

 "web": "./bin/web.js"

 },

bin字段的作用:当安装npm包时,npm将添加一条命令/usr/local/bin/web,web命令软连接到web.js文件。

调试命令行

(1)采用install方法

进入npm包目录下,执行全局install,根据package.json中bin的配置,为全局命令创建软连。

# sudo npm install . -g
/usr/local/bin/web -> /usr/local/lib/node_modules/cli-demo/bin/web.js

/usr/local/lib

`-- cli-demo@1.0.0
...

查看web命令

# which web 

/usr/local/bin/web

执行web命令

# web --start

server start at port 8085

(2)采用npm link方法

npm link方法创建了两个软连,命令与命令文件的软连,全局包与实际包文件的软连。

# sudo npm link

 

/usr/local/bin/web -> /usr/local/lib/node_modules/cli-demo/bin/web.js

/usr/local/lib/node_modules/cli-demo -> /Users/baidu/hwm/home/demos/node/node-commander

接下来可以按照方法(1)进行操作了。

发布命令包

通过npm publish进行发布,前提是有npm帐号。如何操作可以查看npm 官方文档。

本文是通过原生node.js来开发命令工具,而vue-cli是采用commander.js来简化命令工具开发,关于commander.js的使用方法,将在下一篇文章中介绍。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery插件之定时查询待处理任务数量
May 01 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
Vue.js实现价格计算器功能
Mar 30 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
微信小程序实现跑马灯效果
Oct 21 Javascript
d3.js实现图形缩放平移
Dec 19 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 Javascript
Vue.js使用axios动态获取response里的data数据操作
Sep 08 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
Jun 22 #Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 #Javascript
vue使用stompjs实现mqtt消息推送通知
Jun 22 #Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 #Javascript
详解用webpack2搭建angular2的项目
Jun 22 #Javascript
vue2.0实现分页组件的实例代码
Jun 22 #Javascript
纯JS实现只能输入数字的简单代码
Jun 21 #Javascript
You might like
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php获取参数的几种方法总结
2014/02/18 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php密码生成类实例
2014/09/24 PHP
php验证session无效的解决方法
2014/11/04 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python中xrange用法分析
2015/04/15 Python
python实现网站的模拟登录
2016/01/04 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python实现二维数组输出为图片
2018/04/03 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
优秀演讲稿范文
2013/12/29 职场文书
物业管理工作方案
2014/05/10 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
公司租车协议书
2015/01/29 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python