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

我心飞翔 分类:vue

创建项目模板开发

发布模板到npm

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

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

// 目录结构如下
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

lerna create @hzw-cli-dev/request
lerna add axios utils/request

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

// 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 就报错,所以只能在这里进行拼接了。

// 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)
}

判断库里是否有模板

// 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("当前不存在项目模板")
    }
    // 省略不重要的代码
    ... ... 
  }

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

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

添加选择模板交互

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

// 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,然后在数据库中添加一条数据即可。

回复

我来回复
  • 暂无回复内容