#!/usr/bin/env nodeconst pkg =require('../package.json')const commander =require('commander');// const { program } = commander; // 脚手架实例 program是一个单例const program =newcommander.Command();// 这种手动实例化单例,同上,二取一
program
.version(pkg.version)// 设定版本.parse(process.argv)// 解析所有参数
执行 $ xyzcli --version, 并查看结果
1.0.0
执行 $ xyzcli --help, 并查看结果
Usage: xyzcli [options]
Options:
-V, --version output the version number
-h, --help display helpforcommand
这时候,使用 commander 完成了最小粒度的脚手架
这时候,可见,-V, -h 这种别名短称都已经默认给出了
3 )commander 通用全局配置
3.1 配置 usage
const program =newcommander.Command();// 这种手动实例化单例,同上,二取一
program
.usage(' [option]').version(pkg.version)// 设定版本.parse(process.argv)// 解析所有参数
执行 $ xyzcli -h, 查看输出
Usage: xyzcli <command>[option]
Options:
-V, --version output the version number
-h, --help display helpforcommand
可以看到 Usage: xyzcli [option]
3.2 配置 name
const program =newcommander.Command();// 这种手动实例化单例,同上,二取一
program
.name(pkg.name).usage(' [option]').version(pkg.version)// 设定版本.parse(process.argv)// 解析所有参数
这里修改下 package.json 中的 name,比如修改成 xyzcli111
执行 $ xyzcli -h, 查看输出
Usage: xyzcli111 <command>[option]Options:-V,--version output the version number
-h,--help display help for command
注意这里的,Usage: xyzcli111 [option] 变成了 xyzcli111
验证完成,将 package.json 中的 name 从 xyzcli111 再修改回 xyzcli
在实际应用中,我们会取 bin 属性中的第一个key (一般而言,bin里的配置和包名一致, 但是最好取bin的第一个key值)
const program =newcommander.Command();
program
// .name(pkg.name).name(Object.keys(pkg.bin)[0])// 注意这里.usage(' [option]').version(pkg.version)// 设定版本.parse(process.argv)// 解析所有参数
这里不做输出测试
3.3 配置 option
const program =newcommander.Command();// 这种手动实例化单例,同上,二取一
program
// .name(pkg.name).name(Object.keys(pkg.bin)[0]).usage(' [option]').version(pkg.version)// 设定版本.option('-f, --first','第一个').option('-s, --separator ','使用分隔符分割',',').option('-d, --debug','开启调试模式',false).option('-e, --envName ','获取环境变量名称').parse(process.argv)// 解析所有参数
执行 $ xyzcli -h, 查看输出
Usage: xyzcli <command>[option]
Options:
-V, --version output the version number
-f, --first 第一个
-s, --separator<char> 使用分隔符分割 (default: ",")
-d, --debug 开启调试模式 (default: false)
-e, --envName<envName> 获取环境变量名称
-h, --help display helpforcommand
// 定义service脚手架const service =newcommander.Command('service');
service
.command('start [port]').description('start service at some port').action((port)=>{
console.log('service port @', port)})
program.addCommand(service);
program.parse(process.argv)// 解析所有参数, 注意这里的调用位置
执行 $ xyzcli -h, 查看输出
Usage: xyzcli [option]
Options:
-V, --version output the version number
-f, --first 第一个
-s, --separator 使用分隔符分割 (default: ",")
-d, --debug 开启调试模式 (default: false)
-e, --envName 获取环境变量名称
-h, --help display help for command
Commands:
clone [options] [destination] 克隆仓库
service
help [command] display help for command
执行 $ xyzcli service -h, 查看输出
Usage: xyzcli service [options] [command]
Options:
-h, --help display help for command
Commands:
start [port] start service at some port
help [command] display help for command
这里看到 service 命令下存在一个子命令 start
可以看到,这种方式可以对命令进行分组,比如在 service 下 有start, 还可以有stop
// 定义service脚手架const service =newcommander.Command('service');
service
.command('start [port]').description('start service at some port').action((port)=>{
console.log('service port @', port)})
service
.command('stop').description('stop service').action((port)=>{
console.log('stop service')})
program.addCommand(service);
program.parse(process.argv)// 解析所有参数, 注意这里的调用位置
执行 $ xyzcli service -h, 查看输出
Usage: xyzcli service [options] [command]
Options:
-h, --help display help for command
Commands:
start [port] start service at some port
stop stop service
help [command] display help for command
Usage: xyzcli [option]
test command
Options:
-V, --version output the version number
-f, --first 第一个
-s, --separator 使用分隔符分割 (default: ",")
-d, --debug 开启调试模式 (default: false)
-e, --envName 获取环境变量名称
-h, --help display help for command
Commands:
clone [options] [destination] 克隆仓库
service
可以看到这里没有什么信息,只有 一个 test command 的描述
执行 $ xyzcli test -h, 同样也看不到其他实用的信息
现在,对其再次进行修改,测试
// 命令匹配
program
.arguments(' [options]').description('test command',{cmd:'command to run',options:'options for command'}).action((cmd, env)=>{
console.log(cmd, env);})
program.parse(process.argv)// 解析所有参数, 注意这里的调用位置
执行 $ xyzcli test -h, 查看输出结果
Usage: xyzcli [option]
test command
Arguments:
cmd command to run
options options for command
Options:
-V, --version output the version number
-f, --first 第一个
-s, --separator 使用分隔符分割 (default: ",")
-d, --debug 开启调试模式 (default: false)
-e, --envName 获取环境变量名称
-h, --help display help for command
Commands:
clone [options] [destination] 克隆仓库
service
可以看到,这里多了 Arguments 这一项,里面的描述配置都有说明
它的强大之处在于,可以匹配到所有输入的命令, 同时强制必须传 cmd 命令
这个功能和在yargs框架中的 demandCommand 功能类似
还有一种方式,也同样强大,如下
program
.command('install [name]','install package')
program.parse(process.argv)// 解析所有参数, 注意这里的调用位置
执行 $ xyzcli -h, 查看输出结果
Usage: xyzcli [option]
test command
Arguments:
cmd command to run
options options for command
Options:
-V, --version output the version number
-f, --first 第一个
-s, --separator 使用分隔符分割 (default: ",")
-d, --debug 开启调试模式 (default: false)
-e, --envName 获取环境变量名称
-h, --help display help for command
Commands:
clone [options] [destination] 克隆仓库
service
install [name] install package
#!/bin/bash
address="192.168.150.128:6666,192.168.150.128:6666"
hosts=(${address//,/ })
sfile="staticts.log"
for hostitem in ${hosts[@]}
do
ipport=(${hostitem
提高代码质量的插件1. FindBugsFindBugs可以帮你找到Java代码中的bug,它使用Lesser GNU Public License的自由软件许可。2. CheckstyleCheckstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。3. ECLemmaECLemma是一款拥有Eclipse Public License许可的免费工具,它提供了
一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a WHERE 3> (SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt>a. cnt) ORDER BY a.id,a.account DE
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后We
感谢http://www.w3school.com.cn提供的资料
HTML 文档中的每个成分都是一个节点。
节点
根据 DOM,HTML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
整个文档是一个文档节点
每个 HTML 标签是一个元素节点
包含在 HTML 元素中的文本是文本节点
每一个 HTML 属性是一个属性节点
注释属于注释节点
Node 层次
var formData = new FormData($("#inputFileForm")[0]);
$.ajax({
type:'post',
url:webRoot+"/electronicContractUrl/webapp/uploadfile",
data:formData,
async: false,
ca