前端架构: 脚手架框架之yargs高级应用教程

使用 yargs 定义前端脚手架命令 用处:设置用法消息以显示要使用的命令。 阅读详情

脚手架框架之yargs高级应用


1 )高级应用概述

2 )command 应用案例

2.1 官方示例

  • 复杂应用案例,自定义 command
    #!/usr/bin/env node
    const yargs = require('yargs/yargs')
    const { hideBin } = require('yargs/helpers')
    
    yargs(hideBin(process.argv))
      // 注意 command的 四个参数
      .command('serve [port]', 'start the server', (yargs) => {
        return yargs
          .positional('port', {
            describe: 'port to bind on',
            default: 5000
          })
      }, (argv) => {
        if (argv.verbose) console.info(`start server on :${argv.port}`)
        serve(argv.port)
      })
      .option('verbose', {
        alias: 'v',
        type: 'boolean',
        description: 'Run with verbose logging'
      })
      .parse()
    
    • 这里 command 的四个参数分别是
      • 1 )command + options, 这里 serve [port]
        • 这里的serve是自定义的命令,如: $ xyzcli serve
        • 这里的 [port] 是 option,如: $ xyzcli serve --port
      • 2 )描述,这里是 start the server
        • 用于对前面命令和配置的补充描述
      • 3 )builder函数,这里是一个回调
        • builder是指在运行command之前做的一些事情
        • 这里会传入 yargs 对象
        • 比如在这里可以定义在这个 serve 命令中用到的 option
        • 这里定义了一个port参数,并给它一个5000的默认值
      • 4 )handler函数,用于具体执行 command 的行为
        • 比如这个 serve 命令启动了一个http的服务
        • 这个http服务就在这个 handler 函数中定义

2.2 在xyzcli中配置, 这里接上文走一个全量的代码

#!/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'], '其他选项:')
	.command('init [name]', 'Init your project', (yargs) => {
		yargs
			.option('name', {
				type: 'string',
				describe: 'Name of a project',
        alias: 'n',
			})
	}, (argv) => {
		console.log(argv);
	})
	.argv;
  • 执行 $ xyzcli init,查看输出
    { _: [ 'init' ], '$0': 'xyzcli' }
    
  • 执行 $ xyzcli init --name xx,查看输出
    { _: [ 'init' ], name: 'xx', '$0': 'xyzcli' }
    
  • 执行 $ xyzcli init -h,查看输出
    xyzcli init [name]
    
    Init your project
    
    开发选项:
      -d, --debug  Bootstrap debug mode                                                              [布尔]
    
    其他选项:
      -r, --registry  Define global registry                                                       [字符串]
    
    选项:
      -n, --name     Name of a project                                                             [字符串]
      -h, --help     显示帮助信息                                                                    [布尔]
      -v, --version  显示版本号                                                                      [布尔]
    
    • 可见最上面出现一则帮助提示
      xyzcli init [name]
      
      Init your project
      
  • 执行 xyzcli init -d -r npm -n x-project, 查看输出
    {
      _: [ 'init' ], // _ 里面就是注册的 command 命令
      // d 和 debug 存在这两个option, 则为true
      d: true,
      debug: true,
      // r 和 registry 也同样
      r: 'npm',
      registry: 'npm',
      // n 是 name,项目名称为 x-project
      n: 'x-project',
      name: 'x-project',
      // $0 就是脚手架命令
      '$0': 'xyzcli'
    }
    
    • 注意,这种定义下,注意 alias 别名不能重复
    • 如果重复,覆盖了,就会出问题

2.3 参考 lerna 工程示例

  • 参考:https://github.com/lerna/lerna/blob/main/packages/lerna/src/index.ts
    // Bundled
    import { lernaCLI } from "@lerna/core";
    import changedCmd from "@lerna/commands/changed/command";
    import cleanCmd from "@lerna/commands/clean/command";
    import diffCmd from "@lerna/commands/diff/command";
    import execCmd from "@lerna/commands/exec/command";
    import importCmd from "@lerna/commands/import/command";
    import infoCmd from "@lerna/commands/info/command";
    import initCmd from "@lerna/commands/init/command";
    import listCmd from "@lerna/commands/list/command";
    import publishCmd from "@lerna/commands/publish/command";
    import runCmd from "@lerna/commands/run/command";
    import versionCmd from "@lerna/commands/version/command";
    
    import addCachingCmd from "./commands/add-caching/command";
    import repairCmd from "./commands/repair/command";
    import watchCmd from "./commands/watch/command";
    
    // Evaluated at runtime to grab the current lerna version
    const pkg = require("../package.json");
    
    module.exports = function main(argv: NodeJS.Process["argv"]) {
      const context = {
        lernaVersion: pkg.version,
      };
    
      const cli = lernaCLI()
        .command(addCachingCmd)
        .command(changedCmd)
        .command(cleanCmd)
        .command(createCmd)
        .command(diffCmd)
        .command(execCmd)
        .command(importCmd)
        .command(infoCmd)
        .command(initCmd)
        .command(listCmd)
        .command(publishCmd)
        .command(repairCmd)
        .command(runCmd)
        .command(watchCmd)
        .command(versionCmd);
    
      applyLegacyPackageManagementCommands(cli);
    
      return cli.parse(argv, context);
    };
    
  • 按照上述这种用法,找其中一条 .command(listCmd)
  • 定位到 import listCmd from "@lerna/commands/list/command";
  • 再次查看全局配置: https://github.com/lerna/lerna/blob/main/tsconfig.base.json
    "@lerna/commands/list": ["libs/commands/list/src/index.ts"],
    
  • 定位到这里 https://github.com/lerna/lerna/blob/main/libs/commands/list/src/command.ts
    import { filterOptions, listableOptions } from "@lerna/core";
    import type { CommandModule } from "yargs";
    
    /**
     * @see https://github.com/yargs/yargs/blob/master/docs/advanced.md#providing-a-command-module
     */
    const command: CommandModule = {
      command: "list",
      aliases: ["ls", "la", "ll"],
      describe: "List local packages",
      builder(yargs) {
        listableOptions(yargs);
        return filterOptions(yargs);
      },
      async handler(argv) {
        return (await import(".")).factory(argv);
      },
    };
    
    export = command;
    
    • 可见这个 command 是一个对象,对象里有4项参数
  • 以上这个,是 Lerna 对yargs的内部应用,同样,在自己的脚手架中试验一下
    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'], '其他选项:')
      .command('init [name]', 'Init your project', (yargs) => {
        yargs
          .option('name', {
            type: 'string',
            describe: 'Name of a project',
            alias: 'n',
          })
      }, (argv) => {
        console.log(argv);
      })
      // 注意,这里
      .command({
        command: 'list',
        aliases: ['ls', 'la', 'll'],
        describe: 'List local package',
        builder: (yargs) => {},
        handler: (argv) => { console.log(argv); }
      })
      .argv;
    
  • 执行 $ xyzcli list, 查看输出
    { _: [ 'list' ], '$0': 'xyzcli' }
    
  • 执行 $ xyzcli ls, 查看输出
    { _: [ 'ls' ], '$0': 'xyzcli' }
    
  • 执行 $ xyzcli ll, 查看输出
    { _: [ 'll' ], '$0': 'xyzcli' }
    
  • 执行 $ xyzcli la, 查看输出
    { _: [ 'la' ], '$0': 'xyzcli' }
    
  • 以上就是 command 的两种用法

3 )recommendCommands 应用案例

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()
	.recommendCommands() // 注意这里
	.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'], '其他选项:')
	.command('init [name]', 'Init your project', (yargs) => {
		yargs
			.option('name', {
				type: 'string',
				describe: 'Name of a project',
				alias: 'n',
			})
	}, (argv) => {
		console.log(argv);
	})
	.command({
		command: 'list',
		aliases: ['ls', 'la', 'll'],
		describe: 'List local package',
		builder: (yargs) => {},
		handler: (argv) => { console.log(argv); }
	})
	.argv;
  • 上面加上 .recommendCommands() 之后, 尝试执行 $ xyzcli l, 查看输出
    Usage: xyzcli [command] <options>
    
    命令:
      xyzcli init [name]  Init your project
      xyzcli list         List local package                                             [aliases: ls, la, ll]
    
    开发选项:
      -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
    
    是指 ls?
    
    • 看这最后,是指 ls?, 这个命令就是当你输入不全时,尝试对你进行提醒

4 )fail 应用案例


cli
	.usage('Usage: xyzcli [command] <options>')
	.demandCommand(1, 'A command is required. Pass --help to see all available commands and options.')
	.strict()
	.recommendCommands()
  // 注意这里
	.fail((msg, err) => {
		console.log('msg: ', msg)
		console.log('err: ', err)
	})
	.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'], '其他选项:')
	.command('init [name]', 'Init your project', (yargs) => {
		yargs
			.option('name', {
				type: 'string',
				describe: 'Name of a project',
				alias: 'n',
			})
	}, (argv) => {
		console.log(argv);
	})
	.command({
		command: 'list',
		aliases: ['ls', 'la', 'll'],
		describe: 'List local package',
		builder: (yargs) => {},
		handler: (argv) => { console.log(argv); }
	})
	.argv;
  • 尝试执行 $ xyzcli lxx 故意给一个没有的命令,查看输出结果

    msg:  是指 ls?
    err:  undefined
    msg:  无法识别的选项:lxx
    err:  undefined
    
    • 这里输出了 2个 msg, 两个 err, 这里 err 都是 undefined
    • 在实际应用中,参考 lerna, 如下
  • 参考 lerna 中的应用 https://github.com/lerna/lerna/blob/main/libs/core/src/lib/cli.ts#L18

    .fail((msg, err: any) => {
      // certain yargs validations throw strings :P
      const actual = err || new Error(msg);
    
      // ValidationErrors are already logged, as are package errors
      if (actual.name !== "ValidationError" && !actual.pkg) {
        // the recommendCommands() message is too terse
        if (/Did you mean/.test(actual.message)) {
          // TODO: refactor to address type issues
          // eslint-disable-next-line @typescript-eslint/ban-ts-comment
          // @ts-ignore
          log.error("lerna", `Unknown command "${cli.parsed.argv._[0]}"`);
        }
    
        log.error("lerna", actual.message);
      }
    
      // exit non-zero so the CLI can be usefully chained
      cli.exit(actual.exitCode > 0 ? actual.exitCode : 1, actual);
    })
    
超详细的前端脚手架入门篇 超详细的前端脚手架入门篇,通过本文,你将学会如何开始搭建前端脚手架。 阅读详情

相关推荐

ABAP CUA 中央系统里 Partner Profile 的 USERCLONE 错误修正与排障思路

CUA用户分发问题排查要点 在CUA项目中,USERCLONE配置是用户主数据分发的关键环节。当出现分发异常时,应优先检查WE20中的Partner Profile配置,特别是Outbound Parameters中的USERCLONE记录是否存在及其Basic Type是否正确。Basic Type版本需匹配中央系统和子系统的共同支持版本,而非单纯采用最高版本。常见问题包括: 缺少USERCLONE配置 Basic Type版本高于子系统支持范围 端口配置不当 修正时需在中央系统WE20中维护正确的Mes

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1335

yargs入门

yargs开发脚手架

zxw的博客 593

Node CLI 之 Yargs (2)

yargs 是一个用于处理命令行参数的 Node.js 库第一个参数 命令名称第二个参数 命令描述第三个参数 配置参数、别名、类型、默认值等第四个参数 处理命令逻辑举个例子yargs.command('get',})},.help().argv}).argv;${`);`);`);`);第一个参数 定义选项名称第二个参数 配置选项alias 选项简写description 选项描述type 选项值类型。

https://shixuebin.gitee.io/hexo-blog/ 558

脚手架工具——yargs的使用

脚手架工具yargs: 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:liushuran-test [command] <options>")

qq_25436827的博客 1078

node.js使用yargs处理命令行参数操作示例

本文实例讲述了node.js使用yargs处理命令行参数。分享给大家供大家参考,具体如下: yargs库能够方便的处理命令行参数。 一、安装 yargs npm install yargs --save 二、读取命令行参数 const yargs = require('yargs'); let argv = yargs.argv; console.log(argv); argv 对象用来保存命令行参数,传递参数时,参数名以 — 开头,中间使用 = 或 空格,然后接上值 。 argv 有一个 下划线 属性,该属性用来获取非连词线开头的参数 const yargs = require('

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7180

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

基于 dedent 库来设定 epilogue, 达成去除缩进(包含首位空格)的目的。这个API就可以对命令参数过少时进行提示。2.1 初步实践,了解其基本API。3 )参考 lerna 的实现细节。2.2 继续优化,窥探其基本用法。这个API表示最少输入多少命令。它可以在结尾加上我们想要说的话。库来使用,首先进行安装,$2 )对 yargs 的应用。可以发现,最后多了一行。可以看到最后一行,输出。对现有命令或参数起别名。

Wang的专栏 1536

X光安检模型训练第一步:手把手教你处理OPIXray和HIXray这两个小众数据集

本文详细解析了X光安检AI模型训练的关键步骤,重点介绍如何处理OPIXray和HIXray这两个专业数据集。从数据格式转换到YOLO标准,再到数据增强和质量验证,手把手指导开发者高效利用这些数据集进行目标检测模型训练,提升安检场景下的危险物品识别准确率。

weixin_32629853的博客 316

前端架构: 脚手架的开发流程和常用框架

为什么需要脚手架的框架?脚手架的框架,可以大幅度的提升脚手架的开发效率,比如说在脚手架当中,想创建一个命令,命令后面要去配置各种属性,在这个过程中,包括后续的维护迭代,修改的时候,是需要有一定的技巧的,使用脚手架框架就可以让大家不需要去关注脚手架命令创建, 修改这些过程,而专注于脚手架的业务开发,从而大幅提升脚手架开发速度,可以简化脚手架开发流程,大幅度提高这个代码的可读性和可维护性 ,在没使用脚手架框架之前,解析一条命令的时候

Wang的专栏 1120

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1352

GPMC开发笔记(TI开发者推荐笔记)

因为gpmc(General-Purpose Memory Controller)是TI特有的驱动,gpmc的资料比较少,本人开发gpmc驱动算是摸了很多石头过河的。所以想通过这遍文章可以给也做GPMC驱动开发的后来者有一点参考价值。文章如有瑕疵也请各位批评改正。 1.GPMC介绍 gpmc主要用于与nandflash,norflash,fpga进行通信。在这里主要介绍gpmc16位数据和地址线不复用nor模式下的通信。 注意:在这种模式下gpmc_a[0]引脚是没法使用的 1.1GPMC信号线

weixin_44316996的博客 7509

如何用yargs快速构建Yeoman脚手架生成器:新手友好的完整指南

yargs是一个功能强大的命令行参数解析工具,被称为"现代的、海盗主题的optimist继任者"。它可以帮助开发者轻松构建交互式命令行工具,包括Yeoman脚手架生成器,让项目初始化过程变得简单高效。 ## 为什么选择yargs开发脚手架生成器? yargs提供了直观的API和丰富的功能,特别适合构建复杂的命令行工具: - **简单易用**:通过链式调用API,轻松定义命令和参数 - **强

gitblog_00170的博客 614

如何成为一名高级数字 IC 设计工程师(6-7)数字 IC 验证篇:DEBUG 技巧

不懂验证的设计不是好的设计;UVM 验证思维是指导缜密的芯片设计的导师;推荐书籍《芯片验证漫游指南》。

新芯设计的博客 1607

命令行应用开发初学者指南:脚手架篇、UI 库和交互工具

本篇文章介绍了几个常用的命令行工具和库,帮助开发者构建功能丰富、用户友好的命令行应用。主要内容包括:脚手架框架(yargs 和 commander)、命令行输出美化(ANSI Escape 规范、chalk、ora)、交互式命令行(inquirer)。

开心学前端 : ) 1522

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1699

9.9华为OD机试真题 新系统 - 受限任务分配 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【受限任务分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【受限任务分配】多语言题解。

qq_45776114的博客 739

自主搭建脚手架,前端提效

Shell是计算机提供给用户与其他程序进行交互的接口Shell是一个命令解释器,当你输入命令后,由Shell进行解释后交给操作系统内核(OSKernel进行处理)图形操作系统是Shell吗?是的!图形操作系统属于CUI Shell。

weixin_56916588的博客 725

uniapp - 实现手机端H5网页直播功能效果,拿到后端推流地址或播放资源后进行前端的流畅播放和画面展示功能,uniapp实时推流/拉流直播系统详细教程(提供完整示例代码,一键复制开箱即用!)

uniapp,h5网页,手机端H5网页,uniapp h5直播功能页面,uniapp直播实时推送显示,uniapp h5直播怎么做,怎么使用uniapp去实现移动端手机H5直播,h5 vue+uniapp怎么做直播,uniapp中使用videojs构建H5直播播放器,uniappH5端怎么实现直播推流,uniapp如何实现直播,直播聊天功能,h5平台端直播用什么插件,uniapp手机网页直播用什么组件插件播放器,uniapp手机H5直播播放器详细教程,直播项目,怎么使用vue+uniapp怎么做H5实时直播

✅ 精选推荐文章 8794

在浏览器中运行 yargs:从 CDN 加载、平台 Shim 机制与前端 CLI 实战

yargs 不仅在 Node.js 中能够解析命令行参数,还专门提供了 `./browser.mjs` 浏览器入口,允许你通过 unpkg 等 CDN 直接在浏览器里构建一个"伪终端"交互界面。本文以 [docs/browser.md](https://link.gitcode.com/i/d13f473e6237412261c4c52156f217bf) 为主线,结合仓库中的 [browser.

gitblog_01143的博客 708

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

简单写一个前端脚手架

大厂技术高级前端Node进阶 点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群引言脚手架是什么,相信各位已经熟悉得不能再熟悉了,毕竟无论是vue开发者(vue-cli)还是react(create-react-app)开发者,他们都有各自的脚手架,个人虽是用react更多,但不得不说是更喜欢vue-cli的,它的插件机制非常有意思,虽不如webpack的plugin那么...

程序员成长指北 251

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

yargs插件生态终极指南:10个常用第三方扩展推荐与使用技巧

yargs是一个功能强大的Node.js命令行参数解析库,它提供了丰富的插件生态和扩展机制,让开发者能够轻松构建复杂的命令行工具。作为现代命令行工具开发的首选框架,yargs的插件系统让开发者可以快速扩展功能、集成第三方服务,并创建高度可配置的CLI应用。 ## 📦 yargs核心扩展机制解析 ### 1. 命令模块系统 - 构建可扩展CLI架构 yargs的`.commandDir()`

gitblog_01113的博客 1135

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

前端脚手架开发(1)

脚手架实现原理 当我们在终端输入vue create xx的时候 终端会去全局环境变量中,找到vue指令的方法 查看create-react-app的位置,所有通过npm -g安装的包都会放入该目录下。 在终端输入create-react-app之后、 终端解析命令 终端在上述的环境变量中找到creat-react-app命令脚本 window在C:\Users\Administrator\AppData\Roaming\npm可以找到create-react-app.cmd,如上图,这是一个软链接

lin_fightin的博客 1280

前端部署从未如此简单、迅速、脚手架搭建

发布模式:本地打包➡ 本地生成压缩包➡ 登录服务器➡ 上传压缩包➡ 解压压缩包➡ 重新启动➡ 生成git版本标签➡完成(发布模式下需选择发布版本号)。command:包含了localList 和 serverList,可直接写一些本地和linux服务器可执行的指令,存在问题是无法记录上次缓存。command:包含了localList 和 serverList,可直接写一些本地和linux服务器可执行的指令,存在问题是无法记录上次缓存。前端也可以直接终端部署,无需开启连接工具,直接输入指令快速部署。

weixin_44556152的博客 521

04-脚手架框架搭建(二)(前端架构师入门笔记)

04-脚手架框架搭建(二)(前端架构师入门笔记)

前端-张冠的博客 1299
上一篇: Gin框架: 快速搭建起一个Web应用环境及处理不同类型的响应
下一篇: 前端架构: 脚手架框架之commander从基础到高级应用教程
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值