自定义封装 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...

相关推荐
幻境如梦丶皆为虚2 分钟前
从零写一个 DSH 插件:在左侧菜单栏加一个「测试」
开发语言·javascript·ecmascript
吹什么轩4 分钟前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
Bruce_Liuxiaowei39 分钟前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo1 小时前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真1 小时前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan1 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html
墨林陌1 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端
Moment2 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端
AI宇宙狂想家2 小时前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
Sailing2 小时前
🚀🚀【封闭结束7】Agent 为什么总是“失忆”?从长期记忆到上下文工程的生产实践
前端·人工智能·agent