前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程

这篇具有很好参考价值的文章主要介绍了前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

脚手架框架之yargs的基础核心特性与应用


1 )概述

  • yargs 是脚手架当中使用量非常大的一个框架
  • 进入它的npm官网: https://www.npmjs.com/package/yargs
    • 目前版本: 17.7.2
    • Weekly Downloads: 71,574,188 (动态数据)
    • 最近更新:last month (github)
    • 说明这是一个比较优质的库

2 )对 yargs 的应用

  • 准备一个脚手架工程,比如 xyzcli
  • 进行 npm 初始化 $ npm init -y
  • 修改package.json中的关键配置
    • 添加 bin 属性,其值设置为: “bin/index.js”
  • 在脚手架工程目录中执行安装开发依赖
    • $ npm i yargs -S

2.1 初步实践,了解其基本API

  • 编写 bin/index.js
    #!/usr/bin/env node
    
    const yargs = require('yargs/yargs');
    const { hideBin } = require('yargs/helpers');
    console.log(hideBin(process.argv));
    yargs();
    
    • 现在执行 $ npm link 方便调试
    • 执行 $ xyzcli --help, 可以看到输出 [ '--help' ]

2.2 继续优化,窥探其基本用法

  • 好,接着修改 bin/index.js
    #!/usr/bin/env node
    
    const yargs = require('yargs/yargs');
    const { hideBin } = require('yargs/helpers'); // 用于参数解析
    const arg = hideBin(process.argv);
    
    yargs(arg)
      .argv;
    
  • 现在执行 $ xyzcli --help 可以看到输出
    选项:
      --help     显示帮助信息                                                 [布尔]
      --version  显示版本号                                                   [布尔]
    
  • 执行 $ xyzcli --version
    1.0.0
    
  • 这时候说明最简易版脚手架已经开发好了

2.3 探究 strict 模式

  • 现在发现差异,如果执行 $ xyzcli --help 有输出
  • 但是执行 $ xyzcli -h 就没有输出了
  • 可以加入 strict 模式,可以对无用参数输入进行提示,如下添加
    yargs(arg)
      .strict()
      .argv;
    
  • 继续执行 $ xyzcli -h 看到输出了报错提示
    选项:
      --help     显示帮助信息                                                 [布尔]
      --version  显示版本号                                                   [布尔]
    
    无法识别的选项:h
    
  • 注意这个 strict 在 lerna 源码中有用到

2.4 对 usage 这个API的使用

  • 继续测试 usage
    yargs(arg)
      .usage('Usage: xyzcli [command] <options>')
      .strict()
      .argv;
    
  • 执行 $ xyzcli --help,查看输出
    Usage: xyzcli [command] <options>
    
    选项:
      --help     显示帮助信息                                                 [布尔]
      --version  显示版本号                                                   [布尔]
    
  • 看到,最顶部多了 Usage: xyzcli [command] <options>

2.5 对 demandCommand 这个API的使用

  • 这个API表示最少输入多少命令

    yargs(arg)
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .argv;
    
  • 只执行 $ xyzcli, 可查看输出

    Usage: xyzcli [command] <options>
    
    选项:
      --help     显示帮助信息                                                 [布尔]
      --version  显示版本号                                                   [布尔]
    
    A command is required. Pass --help to see all available commands and options.
    
  • 可以发现,最后多了一行 A command is required. Pass --help to see all available commands and options.

  • 这个API就可以对命令参数过少时进行提示

2.6 对 alias 这个API的使用

  • 对现有命令或参数起别名

    yargs(arg)
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      .argv;
    
  • -h 进行测试,执行 $ xyzcli -h,输出

    Usage: xyzcli [command] <options>
    
    选项:
      -h, --help     显示帮助信息                                             [布尔]
      -v, --version  显示版本号                                               [布尔]
    
  • -v 进行测试,执行 $ xyzcli -v,输出

    1.0.0
    

2.7 对 wrap 这个API的使用

  • 对终端cli窗口的宽度的设定
    yargs(arg)
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      .wrap(50) // 这里设定为 50
      .argv;
    
  • 执行 $ xyzcli -h,查看宽度
    Usage: xyzcli [command] <options>
    
    选项:
      -h, --help     显示帮助信息               [布尔]
      -v, --version  显示版本号                 [布尔]
    
  • 修改宽度为 80
    .wrap(80) // 这里设定为 80
    
  • 再次执行 $ xyzcli -h,查看宽度
    Usage: xyzcli [command] <options>
    
    选项:
      -h, --help     显示帮助信息                                             [布尔]
      -v, --version  显示版本号                                               [布尔]
    
  • 可以看到两者不同宽度的区别
  • 如果想要占满终端屏幕, 可以使用 terminalWidth()
    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      .wrap(cli.terminalWidth()) // 这里
      .argv;
    
  • terminalWidth() 会返回终端宽度,这里没有必要做演示了,会铺满终端

2.8 对 epilogue 这个API的使用

  • 它可以在结尾加上我们想要说的话

    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      .wrap(cli.terminalWidth())
      .epilogue('We hope you guys work happily every day!') // 注意这里
      .argv;
    
  • 执行 $ xyzcli -h, 查看输出

    Usage: xyzcli [command] <options>
    
    选项:
      -h, --help     显示帮助信息                                                                  [布尔]
      -v, --version  显示版本号                                                                    [布尔]
    
    We hope you guys work happily every day!
    
  • 可以看到最后一行,输出 We hope you guys work happily every day!

  • 结合 dedent 库来使用,首先进行安装,$ npm i dedent -S

  • 基于 dedent 库来设定 epilogue, 达成去除缩进(包含首位空格)的目的

    #!/usr/bin/env node
    
    const yargs = require('yargs/yargs');
    const { hideBin } = require('yargs/helpers');
    const dedent = require('dedent'); // 注意这里
    
    const arg = hideBin(process.argv);
    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      .wrap(cli.terminalWidth())
      .epilogue(dedent`
        Welcome to use xyzcli command line.
        We hope you guys work happily every day!
    
        For more information, please visit: https://xxx.com/xxx/xyzcli
      `)
      .argv;
    
  • 执行 $ xyzcli -h,查看输出

    Usage: xyzcli [command] <options>
    
    选项:
      -h, --help     显示帮助信息                                                                  [布尔]
      -v, --version  显示版本号                                                                    [布尔]
    
    Welcome to use xyzcli command line.
    We hope you guys work happily every day!
    
    For more information, please visit: https://xxx.com/xxx/xyzcli
    

2.9 对 options 这个API的使用

  • 全局选项,对所有 command 都有效
    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      // .alias('d', 'debug') // 这个设置别名,同下面,二者取其一即可
      .wrap(cli.terminalWidth())
      .epilogue(dedent`
        Welcome to use xyzcli command line.
        We hope you guys work happily every day!
    
        For more information, please visit: https://xxx.com/xxx/xyzcli
      `)
      .options({
        debug: {
          type: 'boolean',
          describe: 'Bootstrap debug mode',
          alias: 'd' // 这里添加了,上面就可以忽略了,推荐写在这里
        }
      })
      .argv;
    
  • 这里设置了 options,内部传入一个对象进行配置,这里别名的两种设置方式,推荐下面这种,在options内部设定
  • 执行 $ xyzcli -h, 查看输出结果
    Usage: xyzcli [command] <options>
    
    选项:
      -d, --debug    Bootstrap debug mode                                                          [布尔]
      -h, --help     显示帮助信息                                                                  [布尔]
      -v, --version  显示版本号                                                                    [布尔]
    
    Welcome to use xyzcli command line.
    We hope you guys work happily every day!
    
    For more information, please visit: https://xxx.com/xxx/xyzcli
    
  • 可见,这里添加了 -d 和 --debug 的选项

2.10 对 option 这个API的使用

  • 这个 option 和 options 这两个API用途差不多, 但使用方式不一样
    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      // .alias('d', 'debug')
      .wrap(cli.terminalWidth())
      .epilogue(dedent`
        Welcome to use xyzcli command line.
        We hope you guys work happily every day!
    
        For more information, please visit: https://xxx.com/xxx/xyzcli
      `)
      .options({
        debug: {
          type: 'boolean',
          describe: 'Bootstrap debug mode',
          alias: 'd' // 这里添加了,上面就可以忽略了,推荐写在这里
        }
      })
      .option('registry', {
        type: 'string',
        describe: 'Define global registry',
        alias: 'r',
        // hidden: true, // 这个就不会出现在提示中,但是可以作为开发调试使用 --registry 或 -r
      })
      .argv;
    
  • option 这个API,可以配置 hidden 选项,这个配置之后,不会出现在终端提示中,但是可作为开发调试使用,$ xyzcli -r
    • 需要后期结合这个参数做对应的处理程序,这块先略过
    • 同时,需注意,options 中是没有 hidden 配置选项的
  • 执行 $ xyzcli -h,查看输出结果
    Usage: xyzcli [command] <options>
    
    选项:
      -d, --debug     Bootstrap debug mode                                                         [布尔]
      -r, --registry  Define global registry                                                     [字符串]
      -h, --help      显示帮助信息                                                                 [布尔]
      -v, --version   显示版本号                                                                   [布尔]
    
    Welcome to use xyzcli command line.
    We hope you guys work happily every day!
    
    For more information, please visit: https://xxx.com/xxx/xyzcli
    
    A command is required. Pass --help to see all available commands and options.
    

2.11 对 group 这个API的使用

  • 对命令进行分组管理, 这次全量代码都在这里
    #!/usr/bin/env node
    
    const yargs = require('yargs/yargs');
    const { hideBin } = require('yargs/helpers');
    const dedent = require('dedent');
    
    const arg = hideBin(process.argv);
    const cli = yargs(arg)
    
    cli
      .usage('Usage: xyzcli [command] <options>')
      .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
      .strict()
      .alias('h', 'help')
      .alias('v', 'version')
      // .alias('d', 'debug')
      .wrap(cli.terminalWidth())
      .epilogue(dedent`
        Welcome to use xyzcli command line.
        We hope you guys work happily every day!
    
        For more information, please visit: https://xxx.com/xxx/xyzcli
      `)
      .options({
        debug: {
          type: 'boolean',
          describe: 'Bootstrap debug mode',
          alias: 'd' // 这里添加了,上面就可以忽略了,推荐写在这里
        }
      })
      .option('registry', {
        type: 'string',
        describe: 'Define global registry',
        alias: 'r',
        // hidden: true, // 这个就不会出现在提示中,但是可以作为开发调试使用 --ci
      })
      .group(['debug'], '开发选项:')
        .group(['registry'], '其他选项:')
      .argv;
    
  • 执行 $ xyzcli -h,查看输出结果
    Usage: xyzcli [command] <options>
    
    开发选项:
      -d, --debug  Bootstrap debug mode                                                            [布尔]
    
    其他选项:
      -r, --registry  Define global registry                                                     [字符串]
    
    选项:
      -h, --help     显示帮助信息                                                                  [布尔]
      -v, --version  显示版本号                                                                    [布尔]
    
    Welcome to use xyzcli command line.
    We hope you guys work happily every day!
    
    For more information, please visit: https://xxx.com/xxx/xyzcli
    
  • 可以看到 Dev Options 这一分组,把 debug 包含进去了,剩余其他的都在 选项中

3 )参考 lerna 的实现细节文章来源地址https://www.toymoban.com/news/detail-833260.html

  • https://github.com/lerna/lerna/blob/main/libs/core/src/lib/cli.ts

到了这里,关于前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍

    在脚手架当中实现命令行的UI显示 1 )概述 在命令行中,如果想实现除传统的常规文本以外的内容 比如想对字体进行加粗斜体下划线,包括对它改变颜色改变前景色改变后景色等等 需要借助一个叫做 ANSI escape code 这样的一个概念 它其实是一个标准,它可以用来控制光标的位

    2024年02月22日
    浏览(26)
  • GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发

    自己亲自实践: mac安装webpack 前提:已经安装node.js,可以参考 https://blog.csdn.net/ZHOU_VIP/article/details/128807814?spm=1001.2014.3001.5501 webpack 安装 首先确认一下是否已经安装: webpack -v 如果提示  command not found: webpack ,则表示未安装。 在Mac OS上安装webpack,需要先安装Node.js和npm。建议

    2024年02月11日
    浏览(31)
  • 实现一个简单的前端脚手架

    前端脚手架概念 实现前端脚手架 随着前端工程化的概念越来越深入人心,脚手架应运而生。简单来说,「前端脚手架」就是指通过选择几个选项快速搭建项目基础代码的工具 前端脚手架可帮我们做什么? 可以帮助我们快速生成项目的基础代码 脚手架工具的项目模板经过了

    2024年02月03日
    浏览(26)
  • 11. 搭建较通用的GoWeb开发脚手架

    代码地址:https://gitee.com/lymgoforIT/bluebell 有了前述知识的基础后,我们便可以开始搭建基本脚手架了。 脚手架应该包含如下信息: 较好的代码管理、即清晰的目录结构,层次分明。 配置文件管理和加载。 日志组件初始化和加载。 Redis 初始化和加载。 MySQL 初始化和加载。 路

    2024年03月14日
    浏览(45)
  • 和chatgpt学架构01-搭建项目脚手架

    今年3月份以来,chatgpt就热度不减。有了这种聊天机器人,就可以很方便的帮助我们提高。无论是我们独立创业还是做项目外包,拥有一套自己可以把握的脚手架还是必备的能力。 过去如果靠自己摸索,组装这么一套脚手架还是费事费力的。一个是涉及技术比较多,既要架构

    2024年02月16日
    浏览(24)
  • 前端如何搭建脚手架并在本地运行

    在开始搭建前,确保本机安装了node,为避免奇奇怪怪的问题 建议node版本16以上 使用过vue ,react,angular的同学都知道 ,应该对脚手架有一定的理解,比如vue-cli的 vue create myApp ,其中vue 就是vue-cli声明的一个命令,下来我们创建一个项目并声明自己的命令。 创建一个空的文件夹

    2024年02月20日
    浏览(29)
  • Vue的架构以及基于脚手架环境开发vue项目

    M:model 模型层(业务逻辑层),主要包含 JS 代码,用于管理业务逻辑的实现。 V:View 视图层,主要包括 HTML / CSS代码,用于管理 UI 的展示。 VM:viewModel (视图模型层),用于将data与视图层的 DOM 进行动态绑定。 基于脚手架环境开发Vue项目 制作web 从小作坊状态转向工程化开

    2024年02月01日
    浏览(30)
  • 【前端】Vue2 脚手架模块化开发 -快速入门

    🎄欢迎来到@边境矢梦°的csdn博文🎄  🎄本文主要梳理Vue2 脚手架模块化开发 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕

    2024年02月10日
    浏览(40)
  • 小程序框架Mpx的下一代脚手架升级之路|滴滴开源

    导读 Mpx开源之路已经走过五个年头, 目前支持了滴滴内部全量的小程序业务开发,是滴滴开源委员会孵化的精品项目。 2022年至今,我们对 Mpx 框架进行了多项重要功能升级,包括组合式API开发规范、分包异步构建支持、单元测试能力建设和今天要重点介绍的@mpxjs/cli脚手架升

    2024年02月13日
    浏览(32)
  • 新鲜出炉的 MVVM 脚手架 —— KtArmor-MVVM,面试安卓系统架构

    } 通过 @BindViewModel 注解viewModel 变量,KtArmor-MVVM 通过 反射 ,自动创建 LoginViewModel 实例, 并赋值给 viewModel 变量。直接使用即可! @BaseUrl(API.BASE_URL) // 看这里!! interface ApiService { @POST(API.LOGIN) suspend fun login(@Query(“username”) username: String, @Query(“password”) password: String): BaseRe

    2024年04月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包