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


目录
相关文章
|
17天前
|
JavaScript 前端开发 容器
脚手架cli3
脚手架cli3
|
2月前
|
存储 前端开发 数据可视化
开源推荐! yite-cli, 基于vite的开箱即用的项目脚手架
开源推荐! yite-cli, 基于vite的开箱即用的项目脚手架
42 1
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
226 1
|
4月前
|
JavaScript 前端开发 Java
Vue CLI脚手架安装、搭建、配置 和 CLI项目分析
Vue CLI脚手架搭建和分析 详解。
73 0
|
4月前
NPM 制作命令行工具 - 入门案例
NPM 制作命令行工具 - 入门案例
28 0
|
4月前
|
资源调度 JavaScript 前端开发
vue-cli安装与搭建SPA项目
vue-cli安装与搭建SPA项目
46 0
|
6月前
|
JavaScript 前端开发
npm 工具库 yenv 简介
npm 工具库 yenv 简介
40 0
|
10月前
|
开发框架
从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架
本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地。
271 0
|
11月前
|
前端开发 JavaScript 搜索推荐
vee-cli脚手架实践(上)
vee-cli脚手架实践
53 0
|
11月前
|
JSON 前端开发 JavaScript
vee-cli脚手架实践(中)
vee-cli脚手架实践
42 0