自定义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>

相关推荐

  1. vue2定义封装图片览组件

    2024-04-11 11:18:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 11:18:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 11:18:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 11:18:04       82 阅读
  4. Python语言-面向对象

    2024-04-11 11:18:04       91 阅读

热门阅读

  1. Gin环境搭建详解

    2024-04-11 11:18:04       36 阅读
  2. HTTP 状态码

    2024-04-11 11:18:04       33 阅读
  3. 企业怎么做数据分析

    2024-04-11 11:18:04       39 阅读
  4. word文档显示异常,mac安装word字体:仿宋gb2312

    2024-04-11 11:18:04       36 阅读
  5. MySQL之约束详细总结

    2024-04-11 11:18:04       34 阅读
  6. linux redis部署教程

    2024-04-11 11:18:04       36 阅读
  7. 完全二叉树的权值-蓝桥183-二叉树

    2024-04-11 11:18:04       42 阅读
  8. Python自动打开Excel文件

    2024-04-11 11:18:04       38 阅读
  9. Spring Boot 经典面试题(二)

    2024-04-11 11:18:04       35 阅读
  10. 【flutter启动分析】

    2024-04-11 11:18:04       31 阅读