从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);


目录
相关文章
|
缓存 JavaScript 前端开发
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
1503 0
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
|
6月前
|
Web App开发 JSON 安全
【跨域难题终结者】:一键解锁Chrome浏览器神秘设置,彻底告别开发阶段的跨域烦恼!
【8月更文挑战第20天】跨域是前端开发常遇难题,尤其在前后端分离项目中。浏览器因安全考量会阻止不同源间的请求。本文对比CORS、JSONP、代理服务器等解法,并介绍开发阶段通过调整Chrome设置来临时禁用跨域限制的方法,提供启动Chrome及使用`fetch`API示例,适合快速测试。但请注意这不适用于生产环境,存在一定安全风险。
1479 1
|
编解码 JavaScript
如何判断屏幕分辨率、大小、浏览器版本
一、浏览器版本 1.js判断 2..NET判断 二、屏幕大小和文档大小 1.js判断 2..NET判断 二、屏幕分辨率 1.js判断 screen.width screen.height 2.
1347 0
|
前端开发 JavaScript 搜索推荐
为什么越来越多的人选择Apifox?
为什么越来越多的人选择Apifox?
567 1
为什么越来越多的人选择Apifox?
|
存储 安全 数据安全/隐私保护
Docker 实现 FIPS 140-2 认证,让您的容器平台更加安全、可信!
我们很高兴地宣布 Docker 已经从美国国家标准与技术研究院(NIST)为 Docker EE 加密库获得了正式的 FIPS 140-2 认证(证书#3304)。
1983 0
|
7月前
|
弹性计算 运维 自然语言处理
启迪操作系统智慧的神:操作系统智能助手OS Copilot
OS Copilot 是阿里云针对Linux推出的一款智能助手,基于大模型构建,简化了Linux操作和运维工作。它支持自然语言问答,辅助命令执行,阿里云CLI调用以及系统运维和调优。这款工具特别适合初学者和运维人员,减少了对命令记忆的需求,通过对话式交互即可完成任务。
243 15
|
9月前
|
存储 前端开发 JavaScript
基于 GitHub Workflow和 Docker 构建 NextJS
基于 GitHub Workflow和 Docker 构建 NextJS
210 0
|
6月前
|
JavaScript UED
惊艳!Vue 3 中使用 Suspense 实现异步组件加载,用户体验 大大大大大 提升!!
惊艳!Vue 3 中使用 Suspense 实现异步组件加载,用户体验 大大大大大 提升!!
|
前端开发 数据安全/隐私保护
|
JavaScript 算法 中间件
vue3 组件初始化流程(vue3 源码系列)
在ensureRenderer 这个函数中,判断renderer是否存在,不存在则创建,并且传入一系列的api去初始化
vue3 组件初始化流程(vue3 源码系列)

热门文章

最新文章