自定义封装 vue多页项目新增项目脚手架

背景

在多页项目中,有时候新建项目需要基于原先的项目拷贝一份,还需要在public上新增html入口,修改vue.config.js配置....这个过程比较繁琐,而且容易漏掉,所以封装了一个自动化的脚手架工具

使用

  • 原先方式: 手动增加

    • 在src目录下新增项目,main.ts中监听版本号的initVersionUpdateJson传入参数改成新的模块 (注意,这里拷贝整个项目后需要把项目内的引用改一下,比如新建项目是B, 拷贝的是A项目,需要全局将@/views/A/XXX 改成@/views/B/XXXX)
    • 在public目录下新增一个html文件
    • 配置vue.config.js中的pages参数,新增一个item
    • 在首页(src/views/Home/index.vue)添加新入口项
    • 在version.json中增加该项目版本
  • 现在: 使用自动化工具

    • 安装:npm install hcli
    • 使用:hcli create 交互式提示将询问:
      • 是否创建新的项目(confirm)
      • 项目名称(name)
      • 在首页显示的标题(title)
      • 选择要复用的模板(model,列举例如 A项目, B项目....)

如何实现

前置知识

  • node bin 封装插件
  • node模块(commander /inquirer /fs/ chalk)

实现

  • 初始化项目npm init -y, 新建bin/hcli.js文件,内容如下 // 在package.json中的配置 { "name": "hcli", "version": "1.0.0", "description": "", "main": "index.js", "bin": { "hcli": "bin/hcli.js" }, "scripts": { "publish": "npm publish", "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "commander": "^14.0.2", "inquirer": "^12.11.1" } }

    javascript 复制代码
    // bin/hcli.js 内容
    #!/usr/bin/env node
     console.log('hello,world')

调试: 在当前目录下npm link,在调试的目录下npm link hcli; 这时候执行hcli就会打印hello,world

  • 为了实现hcli create功能,需要使用commander这个模块, 在bin/hcli.js文件中
javascript 复制代码
#!/usr/bin/env node
const { program } = require('commander')
const create = require('../src/create')

program.command('create').description('create a project ').action(() => {
  console.log('create project')
})

program.parse(process.argv)
  • 在hcli create时需要出现交互界面运行用户输入选择,这时候需要用到inquirer模块
javascript 复制代码
// 新增src/question.js文件
const create = [
    {
        name:'conf',
        type:'confirm',
        message:'是否创建新的项目?'
    },{
        name:'name',
        message:'请输入项目名称?',
        when: res => Boolean(res.conf)
    },{
        name:'title',
        message:'请输入项目在首页的标题?',
        when: res => Boolean(res.conf)
    },{
        type: 'list',
        message: '请选择要复用的项目模版?',
        name: 'model',
        choices: ['A','B','C' ....],
        filter: function(val) {
          return val.toLowerCase()
        },
        when: res => Boolean(res.conf)
    }
]
module.exports = {
    create
}

// 新增src/inquirer.js文件
const inquirer = require('inquirer')
const questions = require('./question')
const prompt = inquirer.prompt || (inquirer.default && inquirer.default.prompt)

const create = () => {
  return new Promise((resolve) => {
    prompt(questions.create).then(res => {
      resolve(res)
    })
  })
}

module.exports = {
  create
}

/// bin/hcli.js文件
#!/usr/bin/env node
const { program } = require('commander')
const inquirer = require('../src/inquirer')
const create = require('../src/create')

program.command('create').description('create a project ').action(() => {
  console.log('create project')
  inquirer.create().then(res=>{
		if(res.conf){
                // todo
                 create(res)
		}
    console.log('res', res)
	})
})
program.parse(process.argv)
  • 最重要的就是根据inquirer传入的res参数来实现create功能
scss 复制代码
const fs = require('fs')
const path = require('path')
const copy = require('../utils/copyFile.js')

module.exports = function(res){
    /**
    * 1、在src/view下创建name目录,将model目录下的文件复制过去
    * 2、在public目录下创建name.html文件
    * 3、修改vue.config.js文件,添加新的入口
    * 4、在home项目中增加入口
    * 5、在public/versions.json中添加版本信息
    * **/
    createBaseProject(res)
    createPublicHtml(res)
    updateVueConfig(res)
    addHomeEnetry(res)
    addVersion(res)
}

function createBaseProject(res){
    ....
}

function createPublicHtml(res){
 ...
}

function updateVueConfig(res) {
 ...
}

const addVersion = (res) => {
 ...
}

这里create方法需要根据自己实际项目的需求来实现~只需列出具体框架,其他让AI实现就好了

参考文章: developer.aliyun.com/article/125...

相关推荐
KaMeidebaby1 分钟前
卡梅德生物技术快报|适配体筛选技术架构演进:SPARK-seq 高通量平台原理与技术流程解析
大数据·前端·其他·百度·架构·spark·新浪微博
之歆8 分钟前
Day15_JavaScript DOM 事件完全指南:从基础到实战(上)
开发语言·javascript·ecmascript
todaycode8 分钟前
Vue + CPP项目
javascript·c++·vue.js
ZC跨境爬虫12 分钟前
跟着 MDN 学CSS day_7:(层叠优先级与继承)
前端·css·数据库·ui·html
Shadow(⊙o⊙)17 分钟前
qt信号和槽链接的接入与断开
开发语言·前端·c++·qt·学习
慕斯fuafua18 分钟前
JS——DOM操作
前端·javascript·html
忆林52020 分钟前
Jenkins前端打包构建老项目拯救指南
运维·前端·jenkins
GISer_Jing21 分钟前
深入解析 Three.js:从架构设计到 WebGPU 渲染革命
javascript·信息可视化·webgl
微祎_26 分钟前
写给新手的 triton-inference-server-ge-backend:昇腾Triton推理服务后端到底是啥?
前端·人工智能·cann
烂不烂问厨房30 分钟前
两张图片拼接在一起中间有条白线
前端