手写vue 脚手架

手写vue 脚手架

项目地址
项目模板地址

必备模块

  • commander:参数解析 --help借助它
  • inquirer :交互式命令行工具 ,使用可以实现命令行选择功能
  • download-git-repo:在git中下载模板
  • metalsmith:读取所有文件,实现模板渲染
  • consolidate:统一模板引擎

git相关知识

  • 查看每次提交的信息git loggit showgit show 某个制定的commitId

  • 创建tag并与commit建立连接git tag 版本名 commitid

  • 查看所有标签git tag

  • 将tag同步到远程服务器git push -u origin main 标签名

  • 删除taggit tag -d tag名

  • GitHub API调用

    1. 查看某个用户下面所有的仓库

      https://api.github.com/users/meet-you-123/repos
      
    2. 查看某个用户下面特定的仓库信息

      https://api.github.com/repos/用户名/仓库名
      
    3. 查看某个特定仓库的版本信息

      https://api.github.com/repos/用户名/仓库名/tags
      

项目开始

1.目录结构
├── bin 
│ └── www // 全局命令执行的根文件 
├── package.json 
├── src 
│ ├── constants.js // 存放常量
│ ├── create.js // create命令逻辑 
│ ├── config.js // config命令逻辑 
│ ├── main.js // 入口文件 
│ └── utils // 存放工具方法 
│── .huskyrc // git hook 
│── .eslintrc.json // 代码规范校验
2.初始化项目
yarn init -y

// package.json
"bin":{
   
    "tsc_cli":"./bin/www"
}

// ./bin/www.js
#! /usr/bin/env node //执行环境是node
require("../src/main.js")

//链接包到全局
yarn link
3.commander
yarn add commander

// ./src/main.js
const programe=require("commander")
programe.version("1.0.0").parse(process.env)

执行tsc_cli --help

4. 动态获取版本号
// ./src/constants.js
const {
   version}=require("../package.json")
module.exports={
   
    version
}
// ./src/main.js
const programe=require("commander")
const {
   version}=require("./utils/constants")
programe.version(version).parse(process.env)
5.配置指令命令
// ./src/main.js

//配置三个指令命令
const mapActions={
   
    create:{
   
        alias:"c",
        description:"create a project",
        examples:[
            "tsc_cli create <project-name>"
        ]
    },
    config:{
   
        alias:"conf",
        description:"config project variable",
        examples:[
            "tsc_cli configm set <k><v>",
            "tsc_cli config get <k>"
        ]
    },
    "*":{
   
        alias:"",
        description:"command not found",
        examples:[]
    }
}

//循环创建命令
Reflect.ownKeys(mapActions).forEach((action)=>{
   
    programe
    .command(action)//配置指令名称
    .alias(mapActions[action].alias)//命令别名
    .description(mapActions[action].description)//命令的描述
    .action(()=>{
   
        //访问不到对应的命令 就打印找不到命令
        if(action==="*"){
   
            console.log(mapActions[action].description)
        }else{
   
            console.log(action)
        }
    })
})

//监听用户的help事件
programe.on("--help",()=>{
   
    console.log("\nExamples:")
    Reflect.ownKeys(mapActions).forEach((action)=>{
   
        mapActions[action].examples.forEach((example)=>{
   
            console.log(`${
     example}`)
        })
    })
})
6.create命令
// ./src/main.js
.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值