利用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 相关文章推荐
Prototype中dom对象方法汇总
Sep 17 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 Javascript
Angular的自定义指令以及实例
Dec 26 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
node实现的爬虫功能示例
May 04 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 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 - Html Transfer Code
2006/10/09 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP SOCKET编程详解
2015/05/22 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python列表list操作相关知识小结
2020/01/29 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
python爬取天气数据的实例详解
2020/11/20 Python
python 实现aes256加密
2020/11/27 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
幼儿园小班评语
2014/04/18 职场文书
人民调解协议书范本
2014/10/11 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
教师岗位职责范本
2015/04/02 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS