博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node生成自定义命令(yargs/commander)
阅读量:5816 次
发布时间:2019-06-18

本文共 3810 字,大约阅读时间需要 12 分钟。

 

第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而commander则可以扩展成类似 ‘express install xx’形式,也可以扩展成express -e xx的形式,前者写法简单,后者扩展性更好。

 

  1. 生成自定义命令
  2. yargs
  3. commander
  4. 完整例子

生成自定义命令

  1. 新建文件夹test,并进入;
  2. 执行npm init 生成package.json文件;
  3. 同级目录下新建hello js,内容如下:
#! /usr/bin/env node 'use strict'; console.log('123');
  1. package.json里添加内容"bin": {"hello": "hello.js"}:
//package.json  {
"name": "hello", "version": "1.0.0", "description": "", "main": "index.js", "bin": {
"hello": "hello.js"}, "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
  1. 执行命令npm link;

  2. 命令行输入hello可看到效果 ——————123;

yargs所实现的功能是可以根据用户命令行输入选项参数的不同而达到改变node环境变量修改全局变量global,从而实现个性定制的功能

//index.js const argv = require('yargs').argv; if (argv.l == 'zh-cn') {
console.log('Chinese site!') } else if (argv.l == 'en') {
console.log('English site!') } //命令行 node yangs.js --l=zh-cn //Chinese site! node yangs.js --l=en //English site!

生成自定义命令里将文件的启动转换为一个自定义命令,而commander则可以在自定义命令基础上做命令的扩展(带参数等);

  1. API 

    整体代码自上到下执行,如果没有碰到parse,则其前面的options不会触发,所以要注意process.xx的写法。

    • version(‘0.0.1’) 版本号;
    • usage(‘zhao’) 名字
    • description(‘hello ,I\’m zhao’) 描述
    • allowUnknownOption 取消接收到未定义option时报错的机制,不报错;
    • command(‘ab’) 定义子命令;
    • alias(‘a’) 定义子命令的短命令;
    • option(‘-p, –peppers’,’Add oeooers’) 自定义选项参数和描述
    • action(cb) 回调
    • parse(process.argv); 至于末尾,解析命令行输入的命令;
  2. 总结 

    我在command,action和option,program.xx这两个组合里绕了很多弯路,总结如下

    #!/usr/bin/env node 'use strict'; const program = require('commander'); program     .version('0.0.1')     .usage('例子')     .description('this is a lizi of commander') program     .command('hello [st]')     .action(function(st,value){
    hello(st,value); }) function hello(val,o){
    console.log(val); console.log(1); console.log(o) } program .option('-s --save [value]','保存') program.parse(process.argv); if (program.save){
    console.log(program.save); }
    • 保持两个组合各自独立,command/action组合,option/program.xx组合, 
      命令行中不能同时出现command子命令和option选项,即lizi hello 23 -s 25是错误的;
    • 当尝试lizi -s 23在命令行输出true而非值的时候,是没有在长选项后跟上[xx];
    • program.s可能会有三种情况出现,一是当输入其他可选项的时候,当尝试lizi -t (xx)时,program.sundefined;二是当输入lizi -s时,program.s为默认值,不设置默认值则为true;三是当输入lizi -s xx时,program.s为xx;

注意:写好下面代码在执行前需要npm link 绑定关系;

例子1: yargs和生成自定义命令的组合

//package.json     {
"name": "lizi", "version": "1.0.0", "description": "", "main": "index.js", "bin": {
"lizi1":"lizi1.js" }, "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": {
"commander": "^2.9.0" } } //lizi1.js #!/usr/bin/env node 'use strict'; console.log(1); const argv = require('yargs').argv; if (argv.l == 'zh-cn') {
console.log('Chinese site!') } else if (argv.l == 'en') {
console.log('English site!') }

例子2: commander和生成自定义命令的组合

//package.json     {
"name": "lizi", "version": "1.0.0", "description": "", "main": "index.js", "bin": {
"lizi":"lizi.js" }, "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": {
"commander": "^2.9.0" } } //lizi.js #!/usr/bin/env node 'use strict'; const program = require('commander'); program .version('0.0.1') .usage('例子') .description('this is a lizi of commander') program .command('hello [st]') .action(function(st,value){
hello(st,value); }) function hello(val,o){
console.log(val); console.log(1); console.log(o) } program .option('-f --flag [value]','保存','ha') .option('-t --tale [value]','保存') program.parse(process.argv); if (program.flag){
global.flag = program.flag; } console.log(global.flag);

转载于:https://www.cnblogs.com/zhaowinter/p/5945067.html

你可能感兴趣的文章
CentOS\Scientific Linux\RHEL网络配置
查看>>
bzoj 3993: [SDOI2015]星际战争
查看>>
linux学习-开机权限修改、修改主机名、shell介绍
查看>>
Error: Connection activation failed: Device not managed by NetworkManager解决方法
查看>>
bzoj 1497: [NOI2006]最大获利
查看>>
bzoj 1818: [Cqoi2010]内部白点
查看>>
PHP Security Guide
查看>>
我的友情链接
查看>>
Windows下bat脚本判断端口是否可用
查看>>
IPSEC ×××连接建立(IKE)详解
查看>>
Cisco.PIX防火墙配置
查看>>
光猫手机自动激活系统
查看>>
python模块——datetime
查看>>
struct字节对齐原则
查看>>
builder-设计模式
查看>>
Node.js笔记 - 修改文件后自动重启node服务
查看>>
linux 常用技巧
查看>>
vue 路由传参 params 与 query两种方式的区别(转载)
查看>>
poj2774
查看>>
centos7安装sonarqube6.7 代码质量管理平台
查看>>