众所周知,虽然 Vue CLI 提供了脚手架的功能,但因为官方的脚手架过于简单,生成好的项目在实际项目开发的时候,还须要作不少事情,而 vue-automation 就是来解决这一痛点,让你的开发效率至少提高 50% 以上css
vue-automation 是一款开箱即用的 Vue 项目模版,它基于 Vue CLI 4html
默认提供开发环境和生产环境两套配置,分别在根目录下 .env.development
和 .env.production
文件里,可配置项有网站标题、接口请求地址和是否开启CDN支持。vue
开发者可根据实际业务需求进行扩展,若是对这块不熟悉,可阅读 Vue CLI 环境变量和模式 章节。ios
全局 SCSS 资源并非全局样式,是变量、@mixin 、@function 这些东西git
在 assets/styles/resources/
目录下存放全局的 SCSS 资源,也就是说在这个目录里的文件,无需在页面上引用便可生效并使用。vue-router
项目中默认存放了 utils.scss
文件,里面有几个 @mixin
和 %
,你能够尝试在页面中使用它们看看效果。vuex
一样,精灵图目录下生成的 SCSS 资源也是全局可调用的。npm
又称雪碧图,原理是将多张小图合并到一张大图上,以便减小 HTTP 请求,提升网站访问速度。json
精灵图原始图片的存放位置位于 assets/sprites/
目录下,注意按文件夹区分。axios
项目运行前会根据文件夹生成对应的精灵图文件(精灵图图片和 .scss
文件),多个文件夹则会生成多个精灵图文件。须要注意的是,在项目运行时,修改文件夹里的图片,会从新生成相关精灵图文件,但若是新建文件夹,则须要从新运行项目才会生成对应精灵图文件。
在 .vue
文件中可经过 @include
直接使用精灵图,无需手动引入 .scss
文件:
// 方法 1 // @include [文件夹名称]-sprite([文件名称]); .icon { @include example-sprite(address); } // 方法 2 // @include all-[文件夹名称]-sprites; @include all-example-sprites;
最终输出以下:
/* 方法 1 */ .icon { background-image: url(img/example.326b35aec20837b9c08563c654422fe6.326b35ae.png); background-position: 0px 0px; background-size: 210px 210px; width: 100px; height: 100px; } /* 方法 2 */ .example-address-sprites { background-image: url(img/example.326b35aec20837b9c08563c654422fe6.326b35ae.png); background-position: 0 0; background-size: 210px 210px; width: 100px; height: 100px; } .example-feedback-sprites { background-image: url(img/example.326b35aec20837b9c08563c654422fe6.326b35ae.png); background-position: -110px 0; background-size: 210px 210px; width: 100px; height: 100px; } .example-payment-sprites { background-image: url(img/example.326b35aec20837b9c08563c654422fe6.326b35ae.png); background-position: 0 -110px; background-size: 210px 210px; width: 100px; height: 100px; }
若是是小型项目,静态图标很少,可所有放在一个文件夹内;若是是中大型项目,文件夹可按模块来划分,这样不一样的模块最终会生成各自的精灵图文件。
如今愈来愈多项目开始使用 SVG 图标作为精灵图的替代品,本框架也提供了 SVG 图标支持,方便使用。推荐去阿里巴巴矢量图标库下载高质量 SVG 图标
首先将 svg 文件放到 src/assets/icons/
目录下,而后在页面中就可使用了,name
就是 svg 文件名
<svg-icon name="example" />
<svg-icon />
组件为全局组件,因此无需注册便可使用
全局组件存放在 components/global/
目录下,须要注意各个组件按文件夹区分。
每一个组件的文件夹内至少保留一个文件名为 index
的组件入口,例如 index.vue
。
组件必须设置 name
并保证其惟一,自动注册会将组件的 name
设为组件名,可参考 SvgIcon 组件写法。
虽然文件夹名称和 name
无关联,但建议与 name
保持一致。
若是组件是经过 js 进行调用,则确保组件入口文件为 index.js
,可参考 ExampleNotice 组件。
路由也实现了自动注册,但由于有优先级的概念,先定义的会先匹配,因此同一模块下的路由须要放在一个路由配置文件里。
开发者只需关心 router/modules/
目录下的文件,一个模块对应一个 .js
文件,可参考 router/modules/example.js
文件。
Vuex 一样实现了自动注册,开发只需关注 store/modules/
文件夹里的文件便可,一样也按照模块区分文件。
新建模版:
// example.js const state = {} const getters = {} const actions = {} const mutations = {} export default { namespaced: true, state, actions, getters, mutations }
文件默认开启命名空间,文件名会默认注册为模块名。
使用方法:
this.$store.state.example.xxx; this.$store.getters['example/xxx']; this.$store.dispatch('example/xxx'); this.$store.commit('example/xxx');
拦截器的用处就是拦截每一次的请求和响应,而后作一些全局的处理。
例如接口响应报错,能够在拦截器里用统一的报错提示来展现,方便业务开发。
本框架提供了一份拦截器参考代码 src/api/index.js
,由于每一个公司提供的接口标准不一样,因此该文件须要开发者根据各自公司的接口去定制对应的拦截器。
代码很简单,首先初始化 axios
对象,而后 axios.interceptors.request.use()
和 axios.interceptors.response.use()
就分别是请求和响应的拦截代码了。
参考代码里只作了简单的拦截处理,例如请求的时候会自动带上 token
,响应的时候会根据错误信息判断是登陆失效仍是接口报错。
该功能基于 plop 实现。
开发过程当中,避免不了手动去频繁建立页面、组件等文件,而且还要在文件里写一些必要的代码,是否是以为很麻烦?如今你能够用更简洁的方式来处理这一切。
模版默认提供了 page(页面/布局) 、component(组件) 、store(全局状态) 三个模版文件,经过 yarn new
指令能够自行选择。
在实际项目开发中,建议根据项目定制适合项目的模版文件,能够大大提升开发效率,当多人协做开发时,也能统一部分标准。
模版目录为 ./plop-templates/
,若是是新建模版,记得在项目根目录 plopfile.js
里引用一下。
为保证代码风格统一,统一使用 VS Code 作为开发 IDE ,并安装如下扩展:
安装完后在 settings.json
中增长以下配置:
"editor.codeActionsOnSave": { "source.fixAll.eslint": true, "source.fixAll.stylelint": true }
最终效果为,在保存时,会自动对当前文件进行代码格式化操做。
上述操做仅对代码的写法规范进行格式化,例如缩进、空格、结尾的分号等。
而在提交代码时, Git 的钩子会检查代码中是否有错误,这些错误是 IDE 没法自动修复的,例如出现未使用过的变量。若是有错误,则会取消这次提交,直到开发者修复完全部错误后才容许提交成功,确保仓库里的代码绝对正确。
可经过修改
.eslintignore
和.stylelintignore
忽略无需作代码规范的文件,例如在项目中引用了一些第三方的插件或组件,咱们就能够将其忽略
若是 git init
仓库初始化是在依赖包安装以后执行的,则没法初始化 Git 钩子,建议在 git init
以后再执行一遍 yarn
或者 npm i
,从新安装一遍依赖包。
配置文件主要有 3 处,分别为 IDE 配置(.editorconfig
)、ESLint 配置(.eslintrc.js
和 .eslintignore
)、StyleLint 配置(.stylelintrc
和 .stylelintignore
)。
以代码缩进举例,本模版默认是以 4 空格进行缩进,若是要调整为 2 空格,则须要在 .editorconfig
里修改:
indent_size = 2
在 .eslintrc.js
里修改:
'indent': [2, 2, { 'SwitchCase': 1 }], ... 'vue/html-indent': [2, 2], ... 'vue/script-indent': [2, 2, { 'switchCase': 1 }]
在 .stylelintrc
里修改:
"indentation": 2
修改完毕后,再分别执行下面两句命令:
yarn run lint yarn run stylelint
该操做会将代码进行一次格式校验,若是规则支持自动修复,则会将不符合规则的代码自动进行格式化。
以上面的例子,当缩进规则调整后,咱们无需手动去每一个文件调整,经过命令能够自动应用新的缩进规则。
除了以上经常使用功能介绍外,vue-automation 还支持 mock 、CDN 、GZip 和移动端等相关配置,方便适应任何开发场景,真正作到了开箱即用。
在我目前所在的公司里,vue-automation 已经稳定用于数十个真实项目上,覆盖企业官网、商城、数字大屏、微信公众号等多个不一样领域。
同时在其基础上,扩展开发出了一套独立的中后台系统框架:Fantastic-admin ,在易用的基础上保证了功能全面,超越市面上大部分同类框架。
在 2021 年,vue-automation 将会全新升级,全面支持 Vue 3
最后祝你们新年快乐,让咱们一块儿对 2020 说再见吧!