|
1 year ago | |
---|---|---|
.vscode | 1 year ago | |
plop-templates | 1 year ago | |
public | 1 year ago | |
src | 1 year ago | |
static | 1 year ago | |
.editorconfig | 1 year ago | |
.env | 1 year ago | |
.env.development | 1 year ago | |
.env.production | 1 year ago | |
.env.test | 1 year ago | |
.eslintignore | 1 year ago | |
.gitignore | 1 year ago | |
README.md | 1 year ago | |
REMARK.md | 1 year ago | |
babel.config.js | 1 year ago | |
directoryList.md | 1 year ago | |
eslintrc.js | 1 year ago | |
jsconfig.json | 1 year ago | |
package-lock.json | 1 year ago | |
package.json | 1 year ago | |
plopfile.js | 1 year ago | |
vue.config.js | 1 year ago |
基础: pug + stylus / sass / less + vuex + axios + quasar + element-ui + vant + bus + ...
高级: 自定义指令, 页面混入, 全局过滤器, 重置样式和主题, 条件编译compression-webpack-plugin
, 动态作用域插槽和具名插槽, 基础库和依赖 (crypto-js, px2rem, fecha ...)
集成: 配置 mob 和 admin 两套代码登录页, mob 的 TabBar, admin sideBar, token 和路由钩子验证
平台: 条件编译下配置不同环境下加载不同组件库, 真正的按需引入. 兼容两端, process.env.VUE_APP_PLATFORM
值为集合, 多平台编译
扩展: 配置了对应的主题和样式重置(条件编译), 分环境: 加载路由 redirectIndex
, progress
, 骨架屏, 404 页面(设备判断优先于且兼容平台), ...
图片压缩(图片压缩不如图片懒加载和 base64) node_modules 抽离公共部分单独部署(多项目)
ssr: 更高的服务器成本(https://ssr.vuejs.org/zh/) Nuxt.js. 更好的 SEO,避开 ajax 获取内容不能被抓取,若 SEO 至关重要; 更快的内容到达时间,若内容到达时间(time-to-content) 与转化率直接相关.
可用:prerender-spa-plugin
预渲染,相对于 ssr 改动小,且只有极少页面需要 seo. 但存在动态数据, 经常发生变化, 实时性, 路由过多情况下不建议使用, 维护成本过高
推荐: 骨架屏实现方案: 全局骨架屏使用的 base64 GIF 图片, 极大减少白屏时间. 页面骨架屏将 SEO 配置骨架屏标签上, 不但实现了 seo 抓取页面内容, 还提升了数据请求 loading 单一, 加载导致页面抖动问题
依赖: 使用 vue-content-loader
依赖, 构建页面级骨架屏. 若使用了 quasar / vant-ui. 可使用其内置的骨架屏组件
--~---~---~---~---~---~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~--
开发环境下开启了 eslint
, 并配置 pre-commit
原则
规范
keep-alive
, dom 递归
, vue-tools
:: 通过 plop
生成自带devDependencies
下 (安装依赖 -D 等同于 --save-dev, -S 即 --save 进入 dependencies
内)文件
使用
this.item = Object.freeze(Object.assign({}, this.item))
滤掉无用字段可用封装 optimize
库plop
方式下自动生成--~---~---~---~---~---~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~--
环境
dist
-- 可在 .env
配置打包平台细节
vue-router
插件, 不在原型链添加 axios 对象, 按需引入element-ui / vant-ui
按需加载, 详见 READEME.MDbabel/syntax-dynamic-import
异步加载插件 -- 详见 .babel.config.js
window.$vue = new Vue({})
, 若只是获取 vue 属性,如 router 可直接导入其文件即可this
以避免性能问题, 示例: @/utils/message.js
全局提示 (import 不会重复导入)this.$xxx
访问 Vue.prototype.$xxx
原型链对象, 无需通过 main.js
作为中转, 直接按照声明方式使用即可. 其中若使用 router / store
同理@/service/progress
分平台全局提示 UI: 设备判断优先于且兼容平台, 如 loading, message, notice, dialog, .... (服务于通用而不是组件内部)optimize
防抖和节流, 序列化 table 组件表头数据, 组件 table 映射必须属性--~---~---~---~---~---~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~---~---~---~---~---~--~-----~---~-----~---~---~--
项目配置
项目工程结构
npm i -D mddir
, 目录结构图 (开发依赖)npm run topology
运行 node node_modules/mddir/src/mddir src
为 src
目录生成目录解构图|-- vue-mcli
|-- .DS_Store
|-- App.vue
|-- main.js
|-- package-lock.json
|-- package.json
|-- assets
| |-- .DS_Store
| |-- icon
| | |-- no-data-icon.png
| |-- images
| | |-- .DS_Store
| | |-- 404.jpg
| | |-- bg-login-admin.jpg
| | |-- bg-login-mob.jpeg
| | |-- sample-media.jpg
| | |-- sample.jpg
| | |-- solution-media.jpg
| | |-- solution.jpg
| |-- logo
| | |-- .DS_Store
| | |-- ico.png
| | |-- logo-calendar.png
| | |-- logo-t.png
| | |-- logo.png
| |-- tmp
| |-- .DS_Store
| |-- banner
| | |-- banner1-mob.png
| | |-- banner1.png
| | |-- banner2-mob.jpg
| | |-- banner2.jpg
| |-- skeleton
| |-- .DS_Store
| |-- seketon-admin.jpeg
| |-- seketon-mob.jpeg
|-- components
| |-- admin
| | |-- table.mixin.js
| | |-- table.vue
| | |-- topBack.vue
| |-- dialog
| | |-- role.vue
| |-- mob
| |-- navBar.vue
|-- config
| |-- bus.js
| |-- setting.js
| |-- expert
| | |-- filters.js
| | |-- mixins.js
| |-- loader
| | |-- element.ui.js
| | |-- flexRem.js
| | |-- quasar.ui.js
| | |-- vant.ui.js
| | |-- vconsole.js
| |-- skeleton
| |-- admin.vue
| |-- conf.js
| |-- mob.vue
|-- directive
| |-- loader.js
| |-- waves
| |-- index.js
| |-- waves.css
| |-- waves.js
|-- mock
|-- router
| |-- index.js
| |-- modules
| |-- admin.js
| |-- mob.js
| |-- sideBar.js
| |-- tabBar.js
| |-- universal.js
|-- service
| |-- api.js
| |-- network.js
| |-- progress.js
| |-- request.js
| |-- vendor.js
|-- store
| |-- getters.js
| |-- index.js
| |-- modules
| |-- config.js
| |-- user.js
|-- styles
| |-- .DS_Store
| |-- animate.styl
| |-- extend.styl
| |-- mixin.styl
| |-- quasar.variables.styl
| |-- transition.styl
| |-- loader
| |-- browser.reset.styl
| |-- common.styl
| |-- element.variables.scss
| |-- navBar.reset.styl
| |-- vant.variables.less
| |-- variables.styl
|-- utils
| |-- array.js
| |-- calc.js
| |-- crypto.js
| |-- device.js
| |-- fecha.js
| |-- optimize.js
| |-- storage.js
| |-- util.js
| |-- validate.js
|-- views
|-- .DS_Store
|-- index.vue
|-- element
| |-- pages
| | |-- hsJianGao.vue
| | |-- loginIn.vue
| |-- sideBar
| |-- sideBar.1.1.vue
| |-- sideBar.1.2.vue
| |-- sideBar.2.1.vue
| |-- sideBar.2.2.vue
| |-- sideBar.layout.vue
|-- quasar
| |-- calendar
| | |-- approval.vue
| | |-- checkIn.vue
| | |-- layout.vue
| |-- cms
| |-- .DS_Store
| |-- layout
| | |-- index.vue
| |-- pages
| |-- .DS_Store
| |-- index.vue
|-- universal
| |-- 404.vue
|-- vant
|-- pages
| |-- login.vue
| |-- setting.vue
|-- tabBar
|-- tabBar.four.vue
|-- tabBar.layout.vue
|-- tabBar.one.vue
|-- tabBar.three.vue
|-- tabBar.two.vue