从0开始搭建一套脚手架cli工具(一)

简介: 从0开始搭建一套脚手架cli工具

目录


前端开发者都会用脚手架搭建vue、react项目,那么如何搭建一套自己的脚手架cli工具呢?

一、 脚手架用到的工具


image.png


二、初始化项目


  1. 初始化项目
npm init
  1. 新建bin文件夹,并在该文件夹下新建index.jsquestion.jscreate.js

  2. 配置初始化后生成的package.json文件
  3. npm link链接到全局

主要是为了方便测试,把npm link在安装在本地目录。执行npm link之前,在package.json中指定bin 指定名字以及文件地址(上面我们已经配置过了), 然后执行npm link(mac系统加sudo)。

5.初步测试

#!/usr/bin/env node需要固定在第一行,系统执行到这里后会沿着对应路径查找 node 并执行。


#! /usr/bin/env node
console.log('测试')

执行guilai-cli 命令

guilai-cli

输出:


说明我们初步测试完成啦


三、获取版本


通过process.argv可以以数组形式获取命令行参数,通过用户传来的不同参数来判断执行不同操作

#! /usr/bin/env node
program.version(require('../package.json').version);
program.parse(process.argv);
guilai-cli -V

输出:


四、安装依赖


默认安装最新版本的命令,启动后可能会有一系列报错,博主的插件版本不会报错,报错可按上图的版本

yarn add chalk commander download-git-repo fs-extra handlebars inquirer ora shelljs 

五、 inquirer实现问答模式


  1. 在bin文件夹下新建question.js文件。
  • fs-extra继承了fs的所有方法,并在此基础上进行了扩展,fse.existsSync判断项目是否重名
```javascript
const fse = require("fs-extra")
const create = [
  {
    name: 'conf',
    type: 'confirm',
    message: '是否创建新的项目?',
  }, {
    name: 'name',
    message: '请输入项目名称:',
    validate: function (val) {
      if (!val) {
        return '亲,你忘了输入项目的名称哦~'
      }
      if (fse.existsSync(val)) {
        return '当前目录已存在同名的项目,请更换项目名'
      }
      return true
    },
    //如果上面为false,则该步骤就不执行
    when: res => Boolean(res.conf)
  }, {
    name: 'desc',
    message: '请输入项目的描述:',
    when: res => Boolean(res.conf)
  },
]
module.exports = {
  create
}
  1. index.js文件中
    如果在刚开始的选项是否新建项目选择false时,answers.conf的值就为false,将不会继续向下执行。
const program = require('commander');
const inquirer = require('inquirer');
const question = require("./question");
const initAction = () => {
  inquirer.prompt(question.create).then(answers => {
    if(answers.conf){
      console.log(answers)
      console.log('项目名称:', answers.name)//test
      console.log("正在拷贝项目,稍等-----")
    }
  })
}
program.version(require('../package.json').version);
program.command('init').description('创建项目').action(initAction);
program.parse(process.argv);


目录
相关文章
|
2月前
|
人工智能 前端开发 JavaScript
Ant Design X ✖️ 百宝箱智能体 SDK 极速构建 AI 聊天应用
本文介绍如何使用 Ant Design X 组件库与百宝箱 SDK 快速搭建 AI 对话应用。前端采用 React + Ant Design X,提供消息气泡、智能输入框等丰富组件;后端通过百宝箱 SDK 接入主流大模型,支持流式响应与高效数据管理,实现极简代码开发、快速上线的智能聊天应用。
353 0
|
4月前
|
人工智能 Kubernetes 监控
初探:从0开始的AI-Agent开发踩坑实录
本文主要阐述作者通过亲身实践,探索利用AI Agent实现开源应用Helm Chart自动化生成的实践历程。
711 18
初探:从0开始的AI-Agent开发踩坑实录
|
网络虚拟化
华为eNSP网络配置综合练习一(vlan +MSTP+VLANif+VRRP+ 静态路由+单臂路由+STP+BFD)
华为eNSP网络配置综合练习一(vlan +MSTP+VLANif+VRRP+ 静态路由+单臂路由+STP+BFD)
978 1
|
Python
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
471 62
|
Prometheus Kubernetes 监控
Prometheus 与 Kubernetes 的集成
【8月更文第29天】随着容器化应用的普及,Kubernetes 成为了管理这些应用的首选平台。为了有效地监控 Kubernetes 集群及其上的应用,Prometheus 提供了一个强大的监控解决方案。本文将详细介绍如何在 Kubernetes 集群中部署和配置 Prometheus,以便对容器化应用进行有效的监控。
932 3
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
409 10
|
存储 Java 程序员
深入理解ThreadLocal及其弱引用
深入理解ThreadLocal及其弱引用
|
Kubernetes 架构师 算法
阿里面试:全国14亿人,统计出重名最多的前100个姓名
文章介绍了如何解决“从全国14亿人的数据中统计出重名人数最多的前100位姓名”的面试题,详细分析了多种数据结构的优缺点,最终推荐使用前缀树(Trie)+小顶堆的组合。文章还提供了具体的Java代码实现,并讨论了在内存受限情况下的解决方案,强调了TOP N问题的典型解题思路。最后,鼓励读者通过系统化学习《尼恩Java面试宝典》提升面试技巧。
阿里面试:全国14亿人,统计出重名最多的前100个姓名
|
弹性计算 运维 自然语言处理
启迪操作系统智慧的神:操作系统智能助手OS Copilot
OS Copilot 是阿里云针对Linux推出的一款智能助手,基于大模型构建,简化了Linux操作和运维工作。它支持自然语言问答,辅助命令执行,阿里云CLI调用以及系统运维和调优。这款工具特别适合初学者和运维人员,减少了对命令记忆的需求,通过对话式交互即可完成任务。
520 15
|
Java Linux Shell
Linux后台运行jar程序
【7月更文挑战第23天】
400 1