node.js如何制作命令行工具(一)
之前使用过一些全局安装的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文件
$ 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的使用方法,将在下一篇文章中介绍。
node.js如何制作命令行工具(一)的更多相关文章
- 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
发布于 2013-12-04 作者 Eduard Koller 这次为我们使用Linux 的朋友带来了更多关于部署云上虚拟机的消息.今天,微软开放技术有限公司 (MS Open Tech),想与大家分 ...
- python制作命令行工具——fire
python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...
- 基于node和npm的命令行工具——tive-cli
前端开发过程中经常会用到各种各样的脚手架工具.npm全局工具包等命令行工具,如:Vue脚手架@vue/cli.React脚手架create-react-app.node进程守卫工具pm2.本地静态服务 ...
- react.js 之 create-react-app 命令行工具系统讲解
react.js 教程之 create-react-app 命令行工具系统讲解 快速开始 npm install -g create-react-app create-react-app my-app ...
- Nodejs 如何制作命令行工具
# 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦![options ...
- Python借助argv和input()制作命令行工具
命令行执行.py文件并传递参数 代码示例如下,将参数解包 from sys import argv import requests import json import time script, us ...
- 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具
原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...
- Gitbook 命令行工具
1.Gitbook 简介 1.1 Gitbook GitBook 是一个基于 Node.js 开发的命令行工具,使用它可以很方便的管理电子书,GitBook 是目前最流行的开源书籍写作方案. 使用 G ...
- node命令行工具—cf-cli
音乐分享: 钢心 - <龙王> 初喜<冠军>后喜<龙王> (PS:听一次钢心乐队的演出后采访才知道 “龙王”隐喻的是一起喝酒的老铁....) ——————————— ...
随机推荐
- scp 命令快速使用讲解
在 Linux 下使用 scp 命令 scp 是安全拷贝协议(Secure Copy Protocol)的缩写,和众多 Linux/Unix 使用者所熟知的拷贝(cp)命令一样.scp 的使用方式类似 ...
- apache用户认证,ssl双向认证配置
安装环境: OS:contos 6.4 httpd:httpd-2.2.15-59.el6.centos.i686.rpm openssl:openssl-1.0.1e-57.el6.i686.rpm ...
- 关于echarts的那些事(地图标点,折线图,饼图)
前记:离上一篇博客的发布已经过去两个月了,这期间总想写点什么,却怎么都写不出来,一直拖到了现在.现在的感觉,不是像这期间一样,想好好整理一番,写一篇好博客,却写不出来.事实发现,随心就好,较好的博客, ...
- linux 内核的rt_mutex 锁操作实现的临界区
rt_mutex 定义的锁规则: 以偶对齐的task_struct指针为上锁标记, 偶对齐的指针地址最低位用以标记是否有waiters. rt_mutex的trylock,lock,以及unlock都 ...
- DDD理论学习系列(1)-- 通用语言
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者.因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任 ...
- Web常见约定规范(精选)
常见的约定规范 (一)HTML约定规范 1,html属性顺序:id class name data-xxx (src for type href)(title alt)(aria-xxx role) ...
- 572. Subtree of Another Tree
Problem statement: Given two non-empty binary trees s and t, check whether tree t has exactly the sa ...
- 在R中整理数据
原始数据一般分散杂乱,并含有缺失和错误值,因此在进行数据分析前首先要对数据进行整理. 一.首先,了解原始数据的结构. 可使用如下函数(归属baseR)来查看数据结构: class(dataobject ...
- Java学习笔记——山西煤老板蛋疼的拉车问题
小荷才露尖尖角,早有蜻蜓立上头 --小池 这个问题是这样描述的: 山西煤老板有3000吨煤,要运到1000km公里外的地方卖.他选择使用火车来运煤,每辆火车行驶一公里将消耗一吨煤,且火车载货上限为10 ...
- 分享一个超级好用的php程序员工具箱
分享一个超级好用的php程序员工具箱,是由php中文网开发的. 集合了php环境搭建.在线小工具.原生手册.文字与视频教程.问答社区等 (php程序员工具箱 v0.1版本,点此下载:http://ww ...