前端架构: 脚手架框架之commander从基础到高级应用教程

使用commander创建自定义命令行工具    准备工作           1.安装node.js,在官网下载即可,利用node.js的打包工具npm       开始         第一步. 首先创建一个demo文件夹(名称自定义)         第二步.在demo文件夹中创建一个bin文件夹,在bin文件夹下创建一个demo.js,然后在js中写下如下代码 #!/usr/bin/env node console.... 阅读详情

commander


1 )概述

  • commander 是一个更为知名的脚手架框架
  • 进入它的npm官网: https://www.npmjs.com/package/commander
  • 目前版本: 12.0.0
  • Weekly Downloads 133,822,797 (动态数据)
  • 最近更新:15 days ago (npm)
  • 说明这是一个更优质的库
  • 同时使用commander的案例也更为知名:vue-cli,webpack-cli,create-react-app
  • 所以commander是我们开发脚手架过程中首选的框架

2 )快速实现一个 commander 脚手架

  • 仍旧在 xyzcli 这个脚手架项目之下,之前是使用 yargs, 这时候把 bin/index.js 修改成 bin/yargs.js (用于备份)
  • 进行安装 $ npm i commander -S
  • 新建 bin/index.js 并编写
    #!/usr/bin/env node
    
    const pkg = require('../package.json')
    const commander = require('commander');
    // const { program } = commander; // 脚手架实例 program是一个单例
    const program = new commander.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 help for command
    
  • 这时候,使用 commander 完成了最小粒度的脚手架
  • 这时候,可见,-V, -h 这种别名短称都已经默认给出了

3 )commander 通用全局配置

3.1 配置 usage

const program = new commander.Command(); // 这种手动实例化单例,同上,二取一

program
	.usage('<command> [option]')
	.version(pkg.version) // 设定版本
	.parse(process.argv) // 解析所有参数
  • 执行 $ xyzcli -h, 查看输出
    Usage: xyzcli <command> [option]
    
    Options:
      -V, --version  output the version number
      -h, --help     display help for command
    
    • 可以看到 Usage: xyzcli <command> [option]

3.2 配置 name

const program = new commander.Command(); // 这种手动实例化单例,同上,二取一

program
	.name(pkg.name)
	.usage('<command> [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 <command> [option] 变成了 xyzcli111
    • 验证完成,将 package.json 中的 name 从 xyzcli111 再修改回 xyzcli
  • 在实际应用中,我们会取 bin 属性中的第一个key (一般而言,bin里的配置和包名一致, 但是最好取bin的第一个key值)

    const program = new commander.Command();
    
    program
      // .name(pkg.name)
      .name(Object.keys(pkg.bin)[0]) // 注意这里
      .usage('<command> [option]')
      .version(pkg.version) // 设定版本
      .parse(process.argv) // 解析所有参数
    
  • 这里不做输出测试

3.3 配置 option

const program = new commander.Command(); // 这种手动实例化单例,同上,二取一

program
	// .name(pkg.name)
	.name(Object.keys(pkg.bin)[0])
	.usage('<command> [option]')
	.version(pkg.version) // 设定版本
	.option('-f, --first', '第一个')
    .option('-s, --separator <char>', '使用分隔符分割', ',')
	.option('-d, --debug', '开启调试模式', false)
	.option('-e, --envName <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 help for command
    
  • 对参数进行解析和判断处理
    const program = new commander.Command(); // 这种手动实例化单例,同上,二取一
    
    program
      // .name(pkg.name)
      .name(Object.keys(pkg.bin)[0])
      .usage('<command> [option]')
      .version(pkg.version) // 设定版本
      .option('-f, --first', '第一个') // 选择第一个参数
      .option('-s, --separator <char>', '使用分隔符分割', ',')
      .option('-d, --debug', '开启调试模式', false)
      .option('-e, --envName <envName>', '获取环境变量名称')
      .parse(process.argv) // 解析所有参数
    
    const options = program.opts(); // 获取所有可用的 opt 作为参数
    const limit = options.first ? 1 : undefined; // 存在第一个参数, 则选1,不存在则不定义
    console.log(program.args[0].split(options.separator, limit)); // 基于分隔符分割获取参数
    
  • 执行,$ xyzcli -f x,y,z,查看输出结果
    [ 'x' ]
    
  • 执行,$ xyzcli -s / -f o/p/q, 查看输出结果
    [ 'o' ]
    

4 ) 配置 command 命令

  • 大类上还分两种小类型
    • 调用 command api 注册命令
    • 调用 addCommand api 注册命令

4.1 command

const program = new commander.Command(); // 这种手动实例化单例,同上,二取一

program
	// .name(pkg.name)
	.name(Object.keys(pkg.bin)[0])
	.usage('<command> [option]')
	.version(pkg.version) // 设定版本
	.option('-f, --first', '第一个') // 选择第一个参数
    .option('-s, --separator <char>', '使用分隔符分割', ',')
	.option('-d, --debug', '开启调试模式', false)
	.option('-e, --envName <envName>', '获取环境变量名称')


// 定义一个克隆的命令
const clone = program.command('clone');
clone
  .description('克隆仓库')
	.action(() => {
		console.log('do clone');
	});

program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
  • 直接执行 $ xyzcli, 并输出
    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 help for command
    
    Commands:
      clone                    克隆仓库
      help [command]           display help for command
    
    • 这里可以看到存在两个 command: clone 和 help
  • 执行 $ xyzcli clone -h, 并输出
    Usage: xyzcli clone [options]
    
    克隆仓库
    
    Options:
      -h, --help  display help for command
    
  • 执行 $ xyzcli clone, 并输出
    do clone
    
  • 对 clone 命令进行扩展
    // 定义一个克隆的命令
    const clone = program.command('clone <source> [destination]');
    clone
      .description('克隆仓库')
      .action((source, destination) => {
        console.log('do clone: ', source, destination);
      });
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 执行 $ xyzcli clone, 并输出
    error: missing required argument 'source'
    
    • 可见source是必传项
    • 而 destination 是可选项
  • 执行 $ xyzcli clone ss dd, 并输出
    do clone:  ss dd
    
  • 在clone命令中添加针对该命令的option
    // 定义一个克隆的命令
    const clone = program.command('clone <source> [destination]');
    clone
      .description('克隆仓库')
      .option('--fc, --force', '是否强制克隆', false)
      .action((source, destination, cmdObj) => {
        console.log('do clone: ', source, destination, cmdObj.force);
      });
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 执行 $ xyzcli clone ss dd, 并输出
    do clone:  ss dd false
    
  • 执行 $ xyzcli clone ss dd --fc, 并输出
    do clone:  ss dd true
    
    • 注意,这里简称不能与前面定义的冲突,如果是多个字符,用 --, 不能用一个 -
    • 这里 --fc 同 --force
  • 执行 $ xyzcli clone --force ss dd, 并输出
    do clone:  ss dd true
    
    • 注意这里更换了option的位置,只要在 clone 后面,就不会受到影响

4.2 addCommand

  • addCommand 的特殊之处是可以注册子命令
    // 定义service脚手架
    const service = new commander.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 <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 help for command
    
    Commands:
      clone [options] <source> [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 = new commander.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
    
  • 执行 $ xyzcli service stop, 查看输出
    stop service
    
  • 通过子命令功能可大大扩展脚手架功能
  • 注意,分组下的 子命令必须如上分开写,不能连写

4.3 )对命令注册进行自动匹配

  • 可以通过 program.arguments 来监听所有命令输入
  • 除了上面注册的命令,其他命令都会命中这里的 arguments 中
    // 命令匹配
    program
      .arguments('<cmd> [options]')
      .description('test command')
      .action((cmd, options)=> {
        console.log(cmd, options);
      })
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 执行 $ xyzcli test, 查看输出
    test undefined
    
  • 执行 $ xyzcli, 查看输出
    error: missing required argument 'cmd'
    
    • 可以看到,这里 cmd 是要求强制输入的
  • 执行 $ xyzcli tt ss, 查看输出
    tt ss
    
  • 执行 $ xyzcli -h, 查看输出
    Usage: xyzcli <command> [option]
    
    test command
    
    Options:
      -V, --version                           output the version number
      -f, --first                             第一个
      -s, --separator <char>                  使用分隔符分割 (default: ",")
      -d, --debug                             开启调试模式 (default: false)
      -e, --envName <envName>                 获取环境变量名称
      -h, --help                              display help for command
    
    Commands:
      clone [options] <source> [destination]  克隆仓库
      service
    
    • 可以看到这里没有什么信息,只有 一个 test command 的描述
  • 执行 $ xyzcli test -h, 同样也看不到其他实用的信息
  • 现在,对其再次进行修改,测试
    // 命令匹配
    program
      .arguments('<cmd> [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 <command> [option]
    
    test command
    
    Arguments:
      cmd                                     command to run
      options                                 options for command
    
    Options:
      -V, --version                           output the version number
      -f, --first                             第一个
      -s, --separator <char>                  使用分隔符分割 (default: ",")
      -d, --debug                             开启调试模式 (default: false)
      -e, --envName <envName>                 获取环境变量名称
      -h, --help                              display help for command
    
    Commands:
      clone [options] <source> [destination]  克隆仓库
      service
    
  • 可以看到,这里多了 Arguments 这一项,里面的描述配置都有说明
  • 它的强大之处在于,可以匹配到所有输入的命令, 同时强制必须传 cmd 命令
  • 这个功能和在yargs框架中的 demandCommand 功能类似
  • 还有一种方式,也同样强大,如下
    program
      .command('install [name]', 'install package')
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 执行 $ xyzcli -h, 查看输出结果
    Usage: xyzcli <command> [option]
    
    test command
    
    Arguments:
      cmd                                     command to run
      options                                 options for command
    
    Options:
      -V, --version                           output the version number
      -f, --first                             第一个
      -s, --separator <char>                  使用分隔符分割 (default: ",")
      -d, --debug                             开启调试模式 (default: false)
      -e, --envName <envName>                 获取环境变量名称
      -h, --help                              display help for command
    
    Commands:
      clone [options] <source> [destination]  克隆仓库
      service
      install [name]                          install package
    
    • 可以看到,最后的 install
  • 如果执行 $ xyzcli install -h, 查看发现报错
    • 报错信息为:Error: 'xyzcli-install' does not exist
    • 它会把当前脚手架 xyzcli 加上 -install 组成一个新的命令 xyzcli-install
    • 而这个命令在我们电脑上是没有的
    • 这个命令有些像 $ npm init install 当输入这个方法的时候也会报错
    • 它会告诉你,'create-install@latest' is not in the npm registry.
    • 这是因为,npm init 命令后面加上参数时,比如 加上 abc, 就是 npm init abc
    • 默认会在前面加上 create, 然后找这个包,也就是 create-abc 这个包
    • 如果这个包存在,则动态下载并执行这个包, 这块了解即可
  • 还可以加上别名
    program
      .command('install [name]', 'install package')
      .alias('i')
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 执行 $ xyzcli -h, 查看输出结果
    Usage: xyzcli <command> [option]
    
    test command
    
    Arguments:
      cmd                                     command to run
      options                                 options for command
    
    Options:
      -V, --version                           output the version number
      -f, --first                             第一个
      -s, --separator <char>                  使用分隔符分割 (default: ",")
      -d, --debug                             开启调试模式 (default: false)
      -e, --envName <envName>                 获取环境变量名称
      -h, --help                              display help for command
    
    Commands:
      clone [options] <source> [destination]  克隆仓库
      service
      install|i [name]                        install package
    
    • 可以看到上述别名起作用了
  • 同时,还可以添加第三个options参数
    program
      .command('install [name]', 'install package', {
        executableFile: 'npm', // 手动修改可执行文件
      })
      .alias('i')
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
  • 这时候我们执行 $ xyzcli i i vue -S
    • 这里的 xyzcli i 或 xyzcli install 等价于 npm
    • 所以,这时候,xyzcli i i vue -S 等价于 npm i vue -S
    • 执行后,可见 package.json 中存在了 vue
    • 这里很奇怪的是: 两个 i, 但是这个问题不大
  • 还有一些其他的配置,比如:
    program
      .command('install [name]', 'install package', {
        executableFile: 'npm', // 手动修改可执行文件
        isDefault: true, // 默认会匹配这个
        // hidden: true, // 不再帮助信息中显示
      })
      .alias('i')
    
    program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
    
    • 这里 isDefault 设置为 true时,当执行 $ xyzcli 就直接会匹配到 npm 命令的帮助信息
    • 这里 hidden 设置为 true时,在帮助信息中就看不到 install 命令了

全部example参考

#!/usr/bin/env node

const pkg = require('../package.json')
const commander = require('commander');
// const { program } = commander; // 脚手架实例 program是一个单例
const program = new commander.Command(); // 这种手动实例化单例,同上,二取一

program
	// .name(pkg.name)
	.name(Object.keys(pkg.bin)[0])
	.usage('<command> [option]')
	.version(pkg.version) // 设定版本
	.option('-f, --first', '第一个') // 选择第一个参数
  	.option('-s, --separator <char>', '使用分隔符分割', ',')
	.option('-d, --debug', '开启调试模式', false)
	.option('-e, --envName <envName>', '获取环境变量名称')


// 定义一个克隆的命令
const clone = program.command('clone <source> [destination]');
clone
	.description('克隆仓库')
	.option('--fc, --force', '是否强制克隆', false)
	.action((source, destination, cmdObj) => {
		console.log('do clone: ', source, destination, cmdObj.force);
	});

// 定义service脚手架
const service = new commander.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);

// 设定 install 命令
program
	.command('install [name]', 'install package', {
		executableFile: 'npm', // 手动修改可执行文件
		// isDefault: true,
		// hidden: true,
	})
	.alias('i')

// 命令匹配,用于兜底
program
	.arguments('<cmd> [options]')
	.description('test command', {
		cmd: 'command to run',
		options: 'options for command'
	})
	.action((cmd, env)=> {
		console.log(cmd, env);	
	})

program.parse(process.argv) // 解析所有参数, 注意这里的调用位置
【工程化】前端脚手架开发:从零打造自己的CLI工具 🔥 阅前必看:本文是《前端开发完全指南》系列的第十篇,包含16个核心代码示例、8张架构流程图解、2个企业级脚手架实战。通过Node.js+Commander.js打造专业级CLI工具,提升团队开发效率300%!命令行交互参数解析模板引擎文件操作依赖安装自动化配置插件系统 1.2 核心模块对比 模块 推荐方案 替代方案 适用场景 命令行解析 Commander.js yargs 复杂参数处理 交互式提示 Inquirer.js prompts 用户输入收集 模板渲染 EJS hand 阅读详情

相关推荐

【高频考点精讲】前端脚手架开发:如何定制项目初始化工具?

🧑‍🏫:全栈老李📅:2025 年 7 月🧑‍💻:前端初学者、进阶开发者🚀:本文由全栈老李原创,转载请注明出处。每次启动新项目时,重复搭建目录结构、配置webpack/babel/eslint是不是让你头疼?作为"全栈老李",我见过太多工程师在这上面浪费生命。今天咱们聊聊如何打造自己的前端脚手架工具,把重复劳动变成一行命令的事。

全栈老李的博客 864

yarn ---- commander@12.0.0: The engine “node“ is incompatible with this module.

由于我本地已存在当前版本的 taro 项目,因此我可以确认是不会相互影响的,因此我选择了方案三,执行,来忽略引擎检查。解决问题的方法很多,找到合适自己的最简单的方法就好。本文只是做个记录,方便以后遇到类似问题查找。

止于至善 3995

Claude Code CLI解析:TypeScript+React+Ink+Commander.js四层架构

CLI工具是现代前端工程的关键基础设施,其本质是将API能力封装为可复用、可集成的命令行接口。理解CLI的架构原理,需从Node.js运行时、TypeScript类型系统、React组件化范式及终端UI渲染引擎(如Ink)协同机制入手。技术价值在于打通本地开发流与云服务(如Anthropic API)的低摩擦通道,支撑自动化代码生成、实时类型校验、智能错误解释等场景。本文聚焦一个典型实践案例——基于TypeScript、React、Ink和Commander.js构建的Claude Code CLI,深入拆

weixin_34279579的博客 465

commander的使用和npm的介绍

1.commander const commander = require("commander"); // 第三方包 const chalk = require("chalk"); console.log(chalk.green("====参数的解析和commander的简单使用====")); commander.name("node"); // 名字介绍 commander.usage("<path file>"); // 使用方式介绍 commander.version("1.0.

litter_lj的博客 4352

3.commander库的使用

3.commander库的使用 1. 获取program实例的两种方式 从commander中解构出一个program单例 const commander = require('commander'); const { program } = commander; 手动实例化一个commander实例为program const commander = require('commander'); const program = new commander.Command(); 2. 参数解析

2024路在何方 736

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 757

yarn安装依赖报错The engine “node“ is incompatible with this module.

如果你的 Node.js 版本太高或太低,你可能需要升级或降级 Node.js。这个错误表明你当前安装的 Node.js 版本与你的项目中指定的 Node.js 版本不兼容。忽略 Node.js 版本的检查可能导致不兼容的问题,因为你的 Node.js 版本可能无法正确地执行项目中的某些代码或依赖项。后,Yarn 将忽略对 Node.js 版本的检查,允许你继续安装依赖,即使 Node.js 版本与项目要求的版本不匹配。更好的做法是尽量使项目的 Node.js 版本与项目配置中指定的版本保持一致。

weixin_45266691的博客 5811

FPGA以太网开发实战:YT8511 PHY芯片MDIO接口配置全流程(附Verilog代码)

本文详细介绍了FPGA以太网开发中YT8511 PHY芯片MDIO接口的配置全流程,包括MDIO接口技术解析、Verilog状态机设计、核心代码实现细节及实战调试经验。通过提供经过验证的Verilog代码和优化策略,帮助开发者快速掌握以太网PHY芯片配置技术,提升通信系统性能。

weixin_29184371的博客 233

手写前端脚手架cli

本文介绍了使用NPM创建Strapi项目的基本流程。内容包括:通过npx命令创建项目(支持最新版本和指定版本)、管理员登录、汉化设置(重命名配置文件)、数据表创建、字段定义、数据编辑以及数据库查看。还演示了如何开放API接口权限、使用Apifox测试接口(包括populate查询媒体数据)以及关系字段的设置方法。文章提供了详细的操作步骤和界面截图,适合Strapi初学者快速上手。

西洼工作室的博客 1354

从零到一:基于Blazor和Elsa Workflows的工作流系统开发实战

本文详细介绍了如何利用Blazor和Elsa Workflows构建高效的工作流系统,从技术选型到生产环境部署,涵盖动态工作流建模、Blazor前端集成及性能优化等核心内容。通过实战案例,展示如何实现订单处理系统的自动化与灵活性,提升企业流程效率。

weixin_26875109的博客 430

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1384

前端架构-week3-commander脚手架命令注册实现

前端架构-week3-commander脚手架

chengbo_eva的博客 650

设计一个订单管理系统(OMS)系统100问?

一个完善的订单管理系统不仅仅是简单地记录和处理订单信息,更需要考虑到订单的全生命周期管理,包括订单的创建、支付、配送、售后等环节。这100个问题围绕订单管理系统(OMS)的各个方面展开,涵盖了系统的功能、架构、安全性、异常处理、订单处理流程、支付、库存管理、客户管理、报表与分析等多个方面。通过这些问题,可以全面考虑订单管理系统在设计与实现过程中需要考虑的各种因素,从而确保系统能够满足业务需求、具有良好的性能和稳定性,同时易于扩展、维护和管理。

nbsaas-boot基于Request-Response的企业级快速开发框架 1384

「中高级前端进阶」从零开始手写一个 vue-cli 脚手架

关注我的小伙伴应该知道,我之前写过一篇脚手架相关的文章,在掘金收获了近一千个赞,被前端大全和奇舞周刊公众号转载。可以说自定义脚手架是每一个中高级前端都应该具备的能力。1....

Yvette Lau的专栏 1158

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 335

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7809

简单写一个前端脚手架

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

程序员成长指北 251

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例

深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例

丨汀、的博客 3446

手把手教你搭建属于自己的前端脚手架工具

前面的话 以前使用vue-cli,vue init webpack project-name一行命令就可以初始化一个我们自己的项目,小柒觉得好神奇,之后研究啦一下vue-cli,其实就是一个高级版的克隆。然后就决定自己实现一套属于自己的脚手架(xq-cli),目前xq-cli脚手架已经实现了有一段时间了,决定拿出来分享。 xq-cli脚手架功能 创建项目 询问用户:询问用户新建项目的基本信息 下...

小柒的前端之旅 3265

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

仿 vue-cli 搭建一个自己的脚手架

什么是脚手架 从前我总觉得脚手架是个很高大上的东西,好像得牛叉一点的人才写的出来,可望而不可即。其实并不是因为困难使我们放弃,而是因为放弃才显得困难(这是个好词好句)。只要你肯花个一天半天的时间,也能写出属于你自己的脚手架。 早前脚手架这个词是从 vue-cli 这里认识的,我们通过npm install -g vue-cli命令全局安装脚手架后, 再执行vue init webpack proj...

Hello博客 2378

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【中高级前端必备】手摸手教你撸一个脚手架

脚手架vue-cli, create-react-app、react-native-cli 等都是非常优秀的脚手架,通过脚手架,我们可以快速初始化一个项目,无需自己从零开...

cpongo11的博客 450

OV9734 DATASHEET,完整规格书

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

提高生产力--让项目配置变为自己专属的脚手架

欢迎加我微信(winty230),拉你进技术群,长期交流学习...欢迎关注「前端Q」,认真学前端,做个专业的技术人... ...

LuckyWinty的博客 329

打造属于自己的项目脚手架工具----Vue CLI,阿里p7岗需要几轮面试

另外,大推一个网上教程 现代 JavaScript 教程 ,文章深入浅出,很容易理解,上面的内容几乎都是重点,而且充分发挥了网上教程的时效性和资料链接。整本书内容质量都很高,尤其是前十章语言基础部分,建议多读几遍。想要取得优秀的面试成绩,刷面试题是必须的,除非你样样精通。在这里,我们希望可以像vue-cli 一样,可以输入对应的参数,实现不同的功能。学习资料在精不在多,二者结合,定能构建你的 JavaScript 知识体系。在这里我们希望可以像vue-cli那样 在终端输入vue 有对应的命令显示。

m0_60707660的博客 673

仿 vue-cli 搭建属于自己的脚手架

脚手架是啥 从前我总觉得脚手架是个很高大上的东西,好像得牛叉????一点的人才写的出来,可望而不可即。其实并不是因为困难使我们放弃,而是因为放弃才显得困难(这是个好词好句????)。只要你肯花个一天半天的时间✊,也能写出属于你自己的脚手架。 早前脚手架这个词是从 vue-cli 这里认识的,我们通过 npm install -g vue-cli 命令全局安装脚手架后, 再执行 vue init webpac...

良_123的专栏 840

打造属于自己的项目脚手架工具----Vue CLI(4)

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)!开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】高级前端工程师必备资料包。

2401_84446580的博客 141
上一篇: 前端架构: 脚手架框架之yargs高级应用教程
下一篇: Gin框架: HTML模板渲染之配置与语法详解
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、付费专栏及课程。

余额充值