自定义自己的vue-cli模板

自定义自己的vue-cli模板

在使用vue-cli的过程中,常用的webpack模板只为我们提供最基础的内容,但每次需要新建一个项目的时候就需要把之前项目的一些配置都搬过来,这样就造成挺大的不方便,如果是作为一个团队,那么维护一个通用的模板,我认为是挺有必要的。
例如下面是我常用构建项目的目录。

src
├─api  //接口
├─assets //图片
├─components  //公用组件
├─css  //样式 主要是scss
├─js //第三方以及工具类
├─page  //页面
├─router //路由
└─store  //vuex

下面说下怎么自定义自己的vue-cli模板

fork一个自己的模板

https://github.com/vuejs-templates/webpack fork 一个库,再提交自己的修改到【自己的分支】,因为我们大部分内容还是在这个基础上做修改的。

关于vue-cli的源码分析可以参考下这个文章从vue-cli源码学习如何写模板

vuejs-templates/webpack目录如下,

│  .gitignore
│  circle.yml
│  deploy-docs.sh
│  LICENSE
│  meta.js   //该文件必须导出为一个对象, 用于定义模板的 meta 信息
│  package.json
│  README.md
│  test.sh
├─docs  // 一些介绍该模板一些模块的文档
└─template  //模板的内容

D:\work\nodetest\webpack>

meta.js

meta.js 主要是定义模板的一些配置, 目前可定义的字段如下:

  • prompts<Object>: 收集用户自定义数据
  • filters<Object>: 根据条件过滤文件
  • completeMessage<String>: 模板渲染完成后给予的提示信息, 支持 handlebars 的 mustaches 表达式
  • complete<Function>: 模板渲染完成后的回调函数, 优先于 completeMessage
  • helpers<Object>: 自定义的 Handlebars 辅助函数

prompts

有用过vue-cli的同学应该有看过下面的这个图

看下 prompts的代码

 "prompts": {
    "name": {  //项目名
      "type": "string",
      "required": true,
      "message": "Project name"
    },
    "description": {
      "type": "string",
      "required": false,
      "message": "Project description",
      "default": "A Vue.js project"
    },
    "author": {
      "type": "string",
      "message": "Author"
    },
    "router": {
      "type": "confirm",
      "message": "Install vue-router?"
    },
    ...
 }

所有的用户输入完成之后, template 目录下的所有文件将会用 Handlebars了解相关的语法点这里) 进行渲染. 用户输入的数据会作为模板渲染时的使用数据,例如,在cmd确认使用router后,那么main.js就会import router,main.js中源码:

{{#router}}
import router from ‘./router‘{{#if_eq lintConfig "airbnb"}};{{/if_eq}}
//类似 {{#if_eq lintConfig "airbnb"}};{{/if_eq}}是启用lint后一些语法的检查

{{/router}}

因为开发常用到vuex,我们可以加入vuex,修改meta.js

 "vuex":{
      "type": "confirm",
      "message": "Install vuex?"
    },

安装过程中,就会询问是否安装vuex

helper

上面的if_eq,还有源码中的unless_eq是原本vue cli中注册的那个辅助函数,在vue-cli中的generate.js:

# vue-cli/lib/generate.js

//...

// register handlebars helper
Handlebars.registerHelper(‘if_eq‘, function (a, b, opts) {
  return a === b
    ? opts.fn(this)
    : opts.inverse(this)
})

Handlebars.registerHelper(‘unless_eq‘, function (a, b, opts) {
  return a === b
    ? opts.inverse(this)
    : opts.fn(this)
})

类似的,你也可以自定义一些函数,方便你自己去处理一些数据,在meta.jshelpers对象中可以加入自己的方法,如源码中就有注册一个if_or的方法,你在文件中就可以用{{#if_or a b}}{{/if_or}}去使用

"helpers": {
    "if_or": function (v1, v2, options) {
      if (v1 || v2) {
        return options.fn(this);
      }

      return options.inverse(this);
    }
  },

filters

filters 是根据条件过滤文件,源码:

 "filters": {
    ".eslintrc.js": "lint",
    ".eslintignore": "lint",
    "config/test.env.js": "unit || e2e",
    "test/unit/**/*": "unit",
    "build/webpack.test.conf.js": "unit",
    "test/e2e/**/*": "e2e",
    "src/router/**/*": "router"  //例如上面的 router 为true的时候,就会加入这个目录
  },

同样,这里我可以加入自己的vuex目录,当,vuextrue的时候,会导入这个目录


 "filters": {
    ".eslintrc.js": "lint",
    ".eslintignore": "lint",
    "config/test.env.js": "unit || e2e",
    "test/unit/**/*": "unit",
    "build/webpack.test.conf.js": "unit",
    "test/e2e/**/*": "e2e",
    "src/store/**/*": "vuex",  //加入自己的目录
    "src/router/**/*": "router"
  },

然后在main.js引入vuex

{{#vuex}}  //vuex为true的时候就会写入这些
import Vuex from ‘vuex‘{{#if_eq lintConfig "airbnb"}};{{/if_eq}}
import store from  ‘./store/store‘{{#if_eq lintConfig "airbnb"}};{{/if_eq}}
Vue.use(Vuex){{#if_eq lintConfig "airbnb"}};{{/if_eq}}
{{/vuex}}

//store.js 文件是我写vuex的入口

new Vue({
  el: ‘#app‘,
  {{#router}}
  router,
  {{/router}}
  {{#vuex}}
  store,
  {{/vuex}}
  {{#if_eq build "runtime"}}
  render: h => h(App){{#if_eq lintConfig "airbnb"}},{{/if_eq}}
  {{/if_eq}}
  {{#if_eq build "standalone"}}
  template: ‘<App/>‘,
  components: { App }{{#if_eq lintConfig "airbnb"}},{{/if_eq}}
  {{/if_eq}}
}){{#if_eq lintConfig "airbnb"}};{{/if_eq}}

还有在template/package.json中也要加入vuex

 "dependencies": {
    "vue": "^2.5.2"{{#router}},
    "vue-router": "^3.0.1"{{/router}}{{#vuex}},
    "vuex": "^2.1.1"{{/vuex}}

  },

后续的话只需要将自己需要的文件跟文件夹,加入到template/src,例如,我这里加入一个询问是否是移动端的,是移动端的话,会引入 lib-flexible.js 以及相关配置的scss文件

  "isMobile":{
        "type": "confirm",
        "message": "is Mobile project?"
    },

最后,提交到github自己的分支上,就可以使用了

vue init jamielhf/webpack#template1 name

github地址

https://github.com/jamielhf/webpack/tree/template1

参考:

vue-cli webpack的配置详解
从vue-cli源码学习如何写模板

原文地址:https://www.cnblogs.com/jlfw/p/12193826.html

时间: 2024-08-22 13:08:59

自定义自己的vue-cli模板的相关文章

Vue.js模板语法

Vue.js模板语法 Vue 实例 构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例来启动的: var vm = new Vue({ // 选项 }) 属性与方法 每个 Vue 实例都会代理其 data 对象里所有的属性: var data = { a: 1 } var vm = new Vue({ data: data }) vm.a === data.a // -> true // 设置属性也会影响到原始数据 vm.a = 2 data.a // ->

如何使用@vue/cli 3.0在npm上创建,发布和使用你自己的Vue.js组件库

译者按: 你可能npm人家的包过成千上万次,但你是否有创建,发布和使用过自己的npm包? 原文: How to create, publish and use your own VueJS Component library on NPM using @vue/cli 3.0 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 尽管我已经在工作上用了Vue.js一段时间,但我从不需要在npm上发布组件.但最近发现在不同的项目重写组件是件非

VUE:模板语法(小白自学)

VUE:模板语法 一:何为声明式 安装规定的语法,去实现一些效果(不需要管流程). 二:模板语法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!-- 1 模板的理解:动态的html页面,包含了一些js语法代码 双大括号表达式 指令(以v-开头的自定义标签属性)

Vue CLI 3开发中试用UIkit 3组件库

一.UIkit组件库与vuikit简介 在选择好意中的前端开发基本框架后,接下来一个重要任务就是选择一款好的UI组件库.其中,UIkit组件库是一款基于Less+JS的一款轻量级.模块化.响应式的前端UI组件库.特别是,从版本3.0.0 beta 31开始完全脱离了jQuery框架.UIkit组件库的一个重要特点是,其提供的组件大部分是非常基础性的,但是也有一部分组件相当实用,例如Slideshow组件.Upload组件.Video组件等,在github网站上的评价星数是13K,相当不错.另一个

使用@vue/cli初始化项目

Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vue-cli -g 卸载它.附上vue-cli官方文档地址 首先检查你的node版本,Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+),命令为 node --version 1.安装vue-cli,-g表示全局安装,这样你才可以直接在命令行使用该指令,否则不行 npm insta

VS Code引用 vue/cli

npm i @vue/cli -g    引用cli脚手架 3.0版本 下载好后 找个空文件夹  vue create myvue 创建vue项目   myvue是自己项目名称 Your connection to the default  npm  registry seems to be slow. Use  https://registry.npm.taobao.org for fster installation?   这两句是引用淘宝镜像  Yes就可以 Please pick a p

web前端 -- vue -- vue cli脚手架

搭建 vue-cli 脚手架 1. 依赖的环境是:node.js 1.1.检测node和npm版本 node.js 官网下载页,选择 windows 系统 msi 安装版本,一路 next 安装. 要有6.9以上的node:node-v 要有3.10以上的npm:npm -v 附:安装node.js 1.2. 安装全局 vue cli Linux下使用命令:sudo npm install --global vue-cli windows下:npm install --global vue-cl

Vue CLI 3搭建vue+vuex 最全分析

一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue serve .vue ui 等命令) CLI 服务:@vue/cli-service是一个开发环境依赖.构建于 webpack 和 webpack-dev-server 之上(提供 如:serve.build 和 inspect 命令) CLI 插件:给Vue 项目提供可选功能的 npm 包 (如

织梦dedecms网站给自定义表单加dede模板自带验证码的方法。

有时候,我们因为需要给dede网站的自定义表单添加验证码,防止恶意填写表单提交. 我们可以用以下的方法来实现: 首先,我们要找到 /plus/diy.php 这个文件 在头部引入文件: require_once(DEDEINC.'/membermodel.cls.php'); 然后找到 elseif($do == 2) {  在这个地方加入代码块 //验证码验证 $svali = GetCkVdValue(); if(preg_match("/1/",$safe_gdopen)){ i

使用vue cli开发项目中遇到的坑

一.部署文件 使用vue cli 开发项目,执行npm run build命令生成dist静态文件,将dist文件包放到服务器中即可. 刚接触webpack,不知道怎么部署前端文件,原以为需要将app文件上传,在 inux上安装node,以及npm install 一系列的包,捣鼓了很久,发现只需要执行 npm run build 将源码打包成一个静态文        文件即可,上传静态文件dist,将 controller指向index.html. 二.跨域问题 实行前后端分离,使用vue i