自定义vue-cli 实现预设模板项目

模板结构

主要包括四个部分:

  • preset.json
  • prompts.js
  • generator/index.js
  • template/

项目最终结构

在这里插入图片描述

preset.json

preset.json 中是一个包含创建新项目所需预定义选项和插件的 JSON 对象,让用户无需在命令提示中选择它们,简称预设;

prompts.js

交互式的告知vue create所需,是根据用户使用需求自定义设置的信息。

定义格式参考Inquirer 问题格式的数组(Inquirer官方文档)

generator.js

generator.js 导出一个函数,这个函数接收三个参数

  1. 一个 GeneratorAPI 实例

提供一系列的API控制最终输出的目录结构及内容
自定义模版必然用到 GeneratorAPI 的 render() 方法

  1. 用户自定义的设置选项

即:用户对 prompts.js 中问题所提供的答案

  1. 整个 preset 预设信息

获取preset.json模板

先用 vue create 去创建一个项目,然后把你的预设信息保存下来,到指定目录下查找预设信息:

# Unix
~/.vuerc
# windows
C://用户/<username>/.vuerc
{
  "useTaobaoRegistry": false,
  "presets": {
    "test": {
      "useConfigFiles": false,
      "plugins": {
        "@vue/cli-plugin-babel": {},
        "@vue/cli-plugin-typescript": {
          "classComponent": true,
          "useTsWithBabel": true
        },
        "@vue/cli-plugin-pwa": {},
        "@vue/cli-plugin-router": {
          "historyMode": true
        },
        "@vue/cli-plugin-vuex": {},
        "@vue/cli-plugin-eslint": {
          "config": "prettier",
          "lintOn": [
            "save"
          ]
        },
        "@vue/cli-plugin-unit-mocha": {},
        "@vue/cli-plugin-e2e-cypress": {}
      },
      "vueVersion": "3",
      "cssPreprocessor": "dart-sass"
    },
    "hpi-base-mp": {
      "useConfigFiles": false,
      "plugins": {
        "@vue/cli-plugin-babel": {},
        "@vue/cli-plugin-typescript": {
          "classComponent": true,
          "useTsWithBabel": true
        },
        "@vue/cli-plugin-pwa": {},
        "@vue/cli-plugin-router": {
          "historyMode": true
        },
        "@vue/cli-plugin-vuex": {},
        "@vue/cli-plugin-eslint": {
          "config": "prettier",
          "lintOn": [
            "save"
          ]
        },
        "@vue/cli-plugin-unit-jest": {},
        "@vue/cli-plugin-e2e-cypress": {}
      },
      "vueVersion": "3",
      "cssPreprocessor": "dart-sass"
    }
  },
  "latestVersion": "5.0.8",
  "lastChecked": 1678342987436
}

其中,presets 保存的就是预设信息,test 是保存预设起的别名,我们的preset.json 需要的就是 test 的值,所以preset.json 中的内容就是这样

{
  "useConfigFiles": false,
  "plugins": {
    "@vue/cli-plugin-babel": {},
    "@vue/cli-plugin-typescript": {
      "classComponent": true,
      "useTsWithBabel": true
    },
    "@vue/cli-plugin-pwa": {},
    "@vue/cli-plugin-router": {
      "historyMode": true
    },
    "@vue/cli-plugin-vuex": {},
    "@vue/cli-plugin-eslint": {
      "config": "prettier",
      "lintOn": [
        "save"
      ]
    },
    "@vue/cli-plugin-unit-jest": {},
    "@vue/cli-plugin-e2e-cypress": {}
  },
  "vueVersion": "3",
  "cssPreprocessor": "dart-sass"
}

创建问答prompts.js

module.exports = []

prompts.js 我们可以不提供问题,导出一个空数组就行;

创建项目模板生成器generator

 // generator/index.js
module.exports = (api, options, rootOptions) => {
  api.extendPackage({
   //扩展pkg#scripts
    scripts: {
      "serve": "vue-cli-service serve",
      "build": "vue-cli-service build",
      "lint": "vue-cli-service lint"
    }, 
  // 扩展pkg#dependencies
    dependencies: {
      "vue": "^2.6.11"
    }, 
    //扩展pkg#devDependencies
    devDependencies: {
      "@babel/core": "^7.11.4",
      "@babel/preset-env": "^7.11.0",
      "@vue/cli-service": "~4.5.0",
      "sass": "^1.26.10",
      "sass-loader": "^8.0.2"
    }
  });
  // 复制template模版
  api.render('../template');
};

创建模板

最后只需将项目模版复制到 template 中,然后删除 package.json 文件。
对于以 . 开头的文件,改成 _ ,例如 .eslintrc.js ==》_eslintrc.js。

因为以. 开头的文件,在Git上传、拉取时会被忽略。

使用预设模板创建项目

//本地
vue create --preset ./hip-base-mp hip-xxx-mp
// GitHub 
$ vue create --preset <username>/<hip-base-mp> <hip-xxx-mp> 
// GitLab 私有服务器 
vue create --preset direct:<私服项目地址>.git --clone <hip-xxx-mp>
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值