模板构造
次要包含四个局部:
- preset.json
- prompts.js
- generator/index.js
- template/
preset.json
preset.json 中是一个蕴含创立新我的项目所需预约义选项和插件的 JSON 对象,让用户无需在命令提醒中抉择它们,简称预设;
prompts.js
交互式的告知vue create所需,是依据用户应用需要自定义设置的信息。
定义格局参考Inquirer 问题格局的数组(Inquirer官网文档)
generator.js
generator.js 导出一个函数,这个函数接管三个参数
一个 GeneratorAPI 实例
- 提供一系列的API管制最终输入的目录构造及内容
- 自定义模版必然用到 GeneratorAPI 的 render() 办法
用户自定义的设置选项
- 即:用户对 prompts.js 中问题所提供的答案
- 整个 preset 预设信息
简略的自定义模板示例
创立我的项目
手动创立目录构造:
|- vue-template |- generator |- index.js |- preset.json |- prompts.js
获取preset.json模板
先用 vue create 去创立一个我的项目,而后把你的预设信息保留下来,到指定目录下查找预设信息:
# Unix~/.vuerc# windowsC://用户/<username>/.vuerc
{ "useTaobaoRegistry": false, "latestVersion": "4.5.14", "lastChecked": 1634820758861, "packageManager": "npm", "presets": { "v2": { "useConfigFiles": true, "plugins": { "@vue/cli-plugin-babel": {}, "@vue/cli-plugin-typescript": { "classComponent": false, "useTsWithBabel": true }, "@vue/cli-plugin-router": { "historyMode": false }, "@vue/cli-plugin-vuex": {}, "@vue/cli-plugin-eslint": { "config": "prettier", "lintOn": [ "save", "commit" ] } }, "vueVersion": "2", "cssPreprocessor": "dart-sass" } }}
其中,presets 保留的就是预设信息,v2 是保留预设起的别名,咱们的preset.json 须要的就是 v2 的值,所以preset.json 中的内容就是这样
{ "useConfigFiles": true, "plugins": { "@vue/cli-plugin-babel": {}, "@vue/cli-plugin-typescript": { "classComponent": false, "useTsWithBabel": true }, "@vue/cli-plugin-router": { "historyMode": false }, "@vue/cli-plugin-vuex": {}, "@vue/cli-plugin-eslint": { "config": "prettier", "lintOn": [ "save", "commit" ] } }, "vueVersion": "2", "cssPreprocessor": "dart-sass"}
创立问答prompts.js
module.exports = []
prompts.js 咱们能够不提供问题,导出一个空数组就行;
创立我的项目模板生成器generator
# generator/index.jsmodule.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-Cli默认模版的文件,能够应用下方办法删除默认模版
// 存储vue-cli3 默认目录 const defaultDirs = [] api.render(files => { Object.keys(files) .filter(path => path.startsWith('src/') || path.startsWith('public/')) .forEach(path => { defaultDirs.push(path) delete files[path] }) }) api.render('../template') // 删除 vue-cli3 默认目录 api.postProcessFiles(files => { defaultDirs.forEach(path => delete files[path]) })
调试
应用 vue create --preset <relativePath/vue-template> <project_name>
去创立我的项目。
部署
能够抉择将模板部署到github、gitlab上。
# GitHub $ vue create --preset <username>/<repo> <vue_project_name> # GitLab 公有服务器 $ vue create --preset gitlab:<my-gitlab-server.com>:<group>/<project_name> --clone <vue_project_name> # 通用$ vue create --preset direct:<url> --clone <vue_project_name>
具体的模板参数能够参考download-git-repo
参考我的项目:
- https://github.com/cklwblove/...
- https://github.com/Kocal/vue-...
- https://github.com/cklwblove/...
- https://git.n.xiaomi.com/xued...
参考文档:
- https://notes.jindll.com/web/...
- https://cli.vuejs.org/zh/dev-...
- https://blog.beard.ink/JavaSc...
- https://www.open-open.com/lib...
- https://xuezenghui.com/posts/...
- https://segmentfault.com/a/11...
- http://axuebin.com/articles/f...