首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
【架构师(第一篇)】整体需求分析和架构设计
2
【架构师(第二篇)】脚手架架构设计和框架搭建
3
【架构师(第三篇)】脚手架开发之掌握Lerna操作流程
4
【架构师(第四篇)】脚手架开发之Lerna源码分析
5
【架构师(第五篇)】脚手架之import-local执行流程及简历设计
6
【架构师(第六篇)】脚手架之需求分析和架构设计
7
【架构师(第七篇)】脚手架之准备阶段编写
8
【架构师(第八篇)】脚手架之 commander 框架使用方法
9
【架构师(第九篇)】如何让 Node 环境支持 ES Module
10
【架构师(第十篇)】脚手架之注册命令及架构优化
11
【架构师(第十一篇)】脚手架之命令注册和执行过程开发
12
【架构师(第十二篇)】脚手架之命令行交互工具 inquirer.js 使用方法
13
【架构师(第十三篇)】脚手架之创建项目准备阶段开发
14
【架构师(第十四篇)】脚手架之 egg.js 和 mongodb 的使用
15
【架构师(第十五篇)】脚手架之创建项目模板开发
16
【架构师(第十六篇)】脚手架之创建项目模板的下载与更新
17
【架构师(第十七篇)】脚手架之 ejs 和 glob 的使用
18
【架构师(第十八篇)】脚手架之项目模板的安装
19
【架构师(第十九篇)】脚手架之组件库模板开发
20
【架构师(第二十篇)】脚手架之自定义模板及第一阶段总结
21
【架构师(第二十一篇)】编辑器开发之需求分析和架构设计
22
【架构师(第二十二篇)】编辑器开发之项目整体搭建
23
【架构师(第二十三篇)】编辑器开发之画布区域组件的渲染
24
【架构师(第二十四篇)】编辑器开发之添加模版到画布
25
【架构师(第二十五篇)】编辑器开发之属性编辑区域表单渲染
26
【架构师(第二十六篇)】编辑器开发之属性编辑同步渲染
27
【架构师(第二十七篇)】前端单元测试框架 Jest 基础知识入门
28
【架构师(第二十八篇)】 测试工具 Vue-Test-Utils 基础语法
29
【架构师(第二十九篇)】Vue-Test-Utils 触发事件和异步请求
30
【架构师(第三十篇)】Vue-Test-Utils 全局组件和第三方库 vuex | vue-router
31
【架构师(第三十一篇)】前端测试之 TDD 的开发方式
32
【架构师(第三十二篇)】 通用上传组件开发及测试用例
33
【架构师(第三十三篇)】 Vue 中的实例及本地图片预览
34
【架构师(第三十四篇)】 业务组件库开发之 vue3 的插件系统
35
【架构师(第三十五篇)】 业务组件库开发之使用 Rollup 进行打包
36
【架构师(第三十六篇)】 业务组件库开发之发布到 NPM
37
【架构师(第三十七篇)】 服务端开发之后端框架与数据库技术选型
38
【架构师(第三十八篇)】 服务端开发之本地安装最新版 MySQL 数据库
39
【架构师(第三十九篇)】 服务端开发之连接 MySQL 数据库
40
【架构师(第四十篇)】 服务端开发之连接 Mongodb 数据库
41
【架构师(第四十一篇)】 服务端开发之安装并连接 Redis数据库
42
【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
43
【架构师(第四十三篇)】 服务端开发之单元测试和接口测试
44
【架构师(第四十四篇)】 服务端开发之 pm2 和 nginx 介绍
45
【架构师(第四十五篇)】 服务端开发之认识 Github actions
46
【架构师(第四十六篇)】 服务端开发之安装 Docker
47
【架构师(第四十七篇)】 服务端开发之认识 Docker
48
【架构师(第四十八篇)】 服务端开发之 Dockerfile
49
【架构师(第四十九篇)】 服务端开发之认识 Docker-compose
50
【架构师(第五十篇)】 服务端开发之自动发布到测试机
清单首页架构文章详情

【架构师(第十五篇)】脚手架之创建项目模板开发


创建项目模板开发

发布模板到npm

模板的开发需要创建一个新的文件夹,命名为 hzw-cli-dev-template 。文件夹中每一个项目都是一个模板。 新建一个目录 hzw-cli-dev-template-vue3 ,并初始化 npm init -y,这就是一个 vue3 的模板。

hzw-cli-dev-template-vue3 目录只是用来存放模板的,后面还可能会添加一些其他逻辑。目录下新建 template 文件夹,这个是真正的模板模块。

代码语言:javascript
复制
// 目录结构如下
D:\imooc-learn\hzw-cli-dev-template
├── hzw-cli-dev-template-vue3
   ├── template
   └── package.json

我们利用 vue-cli 创建一个默认模板 vue create test-vue3,然后再基于这个模板修改部分内容,成为我们自己定制的模板,把修改后的内容全部移到 template 中。

然后通过 npm publish 把模板发送到 npm 中。

将模板信息存入数据库

可以通过 mongodb compass 可视化修改数据库的数据,填入以下字段。

再次调用接口,数据正常取回。

新建请求工具模块

新建一个 @hzw-cli-dev/request 包,放在 utils 目录下。然后给它安装 axios

代码语言:javascript
复制
lerna create @hzw-cli-dev/request
lerna add axios utils/request

编写代码,这里不知道为什么定义了 baseUrl 就报错 connect ECONNREFUSED 127.0.0.1:80 ,为了不影响学习,就把这部分注释了。

代码语言:javascript
复制
// utils\request\lib\index.js
const axios = require('axios')

// 设置了 baseurl 就报错?????
// const BASE_URL = process.env.HZW_CLI_BASE_URL || 'http://www.duwanyu.com:7001'
// axios.defaults.baseUrl = BASE_URL

axios.defaults.timeout = 5000

// 响应拦截器
axios.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    return Promise.reject(error)
  }
)

module.exports = axios;

请求模板API

init\lib 下新建一个文件,专门用来获取模板信息,前面提到设置了 baseUrl 就报错,所以只能在这里进行拼接了。

代码语言:javascript
复制
// commands\init\lib\getTemplate.js
const axios = require('@hzw-cli-dev/request')
const BASE_URL = process.env.HZW_CLI_BASE_URL || 'http://www.duwanyu.com:7001'
const url = `${BASE_URL}/project/gettemplate`

module.exports = function() {
  return axios.get(url)
}

判断库里是否有模板

代码语言:javascript
复制
// commands\init\lib\index.js  prepare 方法

  const getTemplate = require('./getTemplate')
  
  async prepare() {
    // 0.判断模板是否存在
    const template = await getTemplate()
    console.log('🚀🚀 ~ InitCommand ~ template', template);
    if (!template || template.length === 0) {
      throw new Error("当前不存在项目模板")
    }
    // 省略不重要的代码
    ... ... 
  }

这样就可以正常获取请求结果了。

添加选择模板交互

模板列表使用方法动态生成。

代码语言:javascript
复制
// commands\init\lib\index.js  getInfo 方法
... ... 
{
  type: 'list',
  message: '请选择项目模板',
  name: 'template',
  default: 'vue3',
  choices: this.createTemplateChoices()
},
... ... 

 /**
   * @description: 动态创建模板选项列表
   * @param {*}
   * @return {*}
   */
  createTemplateChoices() {
    return this.template.map((item) => ({
      value: item.npmName,
      name: item.name
    }))
  }

添加了交互后,就可以在创建项目的时候选择模板了。

添加第二个模板

下载 👉👉vue-element-admin,下载成 zip 就可以。

也是先把项目跑起来

安装依赖的时候报错了,解决方案如下

  • vue-element-admin\package.json 删除 "tui-editor": "1.3.3",
  • vue-element-admin\src\components 删除 MarkdownEditor 文件夹
  • vue-element-admin\src\views\components-demo 删除 markdown.vue 文件
  • vue-element-admin\src\router\modules components.js 删除 {path: 'markdown',...}
  • 使用 yarn install 安装依赖

然后 npm run dev 运行,长这个样子就启动成功了。

然后我们把代码修改成自己想要的样子,移动到 hzw-cli-dev-template 下新建的 hzw-cli-dev-template-vue-admin 目录下。

执行 npm publish 发送到 npm

然后在数据库中添加一条数据。

现在我们的脚手架就有两个模板了。

这样做的好处是,当脚手架开发完成后,需要添加新模板时,无需改动脚手架代码,只需要把一个新的模板发布到 npm,然后在数据库中添加一条数据即可。

下一篇
举报
领券