利用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扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
JQuery弹出层示例可自定义
May 19 Javascript
浅析javascript 定时器
Dec 23 Javascript
jquery操作select方法汇总
Feb 05 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
Javascript实现基本运算器
Jul 15 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
vue.js 实现点击按钮动态添加li的方法
Sep 07 Javascript
vue+高德地图写地图选址组件的方法
May 18 Javascript
Promise扫盲贴
Jun 24 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP读取MySQL数据代码
2008/06/05 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
激活 ActiveX 控件
2006/10/09 Javascript
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
JavaScript中string对象
2015/06/12 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
Python中__name__的使用实例
2015/04/14 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
详解python做UI界面的方法
2019/02/27 Python
python的依赖管理的实现
2019/05/14 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
办公室前台的岗位职责
2013/12/20 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
离婚答辩状怎么写
2015/05/22 职场文书