脚手架开发

161 阅读2分钟

目标:开发一个可以下载react、vue、trao工程化模版的脚手架

1、搭建项目

目录结构

一般一个脚手架项目的目录

/bin  # ------ 命令执行文件
/lib  # ------ 工具模块
/template # ------ 模板
package.json

npm init

初始化,创建package.json

安装依赖

npm install commander inquirer ora download-git-repo
  • commander 可以解析脚手架命令和参数,用于处理用户输入的命令,合并多选项,处理短参,等等
  • inquirer 命令行输入集合,用于和用户进行交互
  • ora 显示loading动画效果
  • ownload-git-repo 下载并提取git仓库,用于下载模版

其他常用的库

  • chalk 可以给终端字体样式
  • log-symbols 在终端上显示√或× 等图标
  • open 打开诸如URL,文件,可执行文件之类的东西=
  • progress 显示进度条

创建命令行文件

根目录下创建bin文件夹,在bin文件夹下创建 hgl-templates-cli.js

#!/usr/bin/env node
//第一行其中#!/usr/bin/env node表示用node解析器执行本文件。
const program = require('commander')
const inquirer = require('inquirer')
const ora = require('ora')
const download = require('download-git-repo')

program
.command('create <projectName>')
.description('create a new project')
.alias('c')
.action((projectName, options) => {
  inquirer
   .prompt([
     {
       type: 'list',
       name: 'frameTemplate',
       message: '请选择框架类型',
       choices: ['Vue3',  'React', 'Trao']
     }
   ])
   .then((answer) => {
      let downloadUrl = ''
      switch (answer.frameTemplate) {
        case 'Vue3':
          downloadUrl='direct:https://github.com/hanguoliangsworld/vue3-ts.git'
          break;
        case 'React':
          downloadUrl='direct:https://github.com/hanguoliangsworld/react-ts.git'
          break;
        case 'Trao':
          downloadUrl='direct:https://github.com/hanguoliangsworld/template-cli.git'
          break;
        default:
          break;
      }

      const spinner = ora()
      spinner.text = '正在下载模板...'
      spinner.start()
      download( downloadUrl, projectName,{ clone: true },function (err) {
          if (err) {
            spinner.fail(err,'模板下载失败')
          } else {
            spinner.succeed('模板下载成功')
          }
        }
      )
   })
})
program.version('1.0.1').parse(process.argv)

package.json 定义命令文件

{
  "name": "hgl-templates-cli",
  "version": "1.0.1",
  "description": "提供react、vue项目模版",
  "bin": {
    "hgl-templates-cli": "./bin/hgl-templates-cli.js"
  },
  "private": false,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xiaozuanfeng",
  "license": "ISC",
  "dependencies": {
    "chalk": "^2.4.2",
    "commander": "^9.4.1",
    "download-git-repo": "^3.0.2",
    "inquirer": "6.2.2",
    "ora": "^3.2.0",
    "rimraf": "^3.0.2"
  },
  "keywords": [
    "cli",
    "react",
    "vue",
    "trao"
  ]
}

2、本地调试

根目录下运行 npm link(npm unlink // 卸载link安装),此时脚手架被安装到全局,可以使用了。

npm link

在其他目录下 运行即可

hgl-templates-cli create Test

image.png

3、发布

在 npm 官网 www.npmjs.com/ 注册并创建 npm 账号

设置官方源地址

npm config set registry https://registry.npmjs.org/

登陆

npm login

输入账号密码,并输入邮箱和验证码

image.png

发布

npm publish

更新

npm version 版本号
npm publish

可以在npm官网上查看自己发布过的包

image.png