开课吧web全栈架构师第16期2020完结vue项目最佳实践_第1页
开课吧web全栈架构师第16期2020完结vue项目最佳实践_第2页
开课吧web全栈架构师第16期2020完结vue项目最佳实践_第3页
开课吧web全栈架构师第16期2020完结vue项目最佳实践_第4页
开课吧web全栈架构师第16期2020完结vue项目最佳实践_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

constconstport=module.exports=publicPath:'/best-practice',//部署应用包时的基本URLdevServer:{}配置 ck: npmnpmisvg-sprite-loader-consttitle="vue项目最佳实践module.exports{ {//设置w name:title,}ww配置ck: ck-chain称为链式操作,可以更细粒度控制范例:svgiconck<title><%= ckCresolve定义一个绝对路径获取函数constpath=require('path')functionresolve(dir)returnpath.join(dirname,} ck(config)//配置svg规则排除 目标给svg规则增加一个排除选项exclude:['path/to/icon']//新增icons规则,设置svg-sprite-loader处理icons .options({symbolId:'icon-} <usexlink:href="#icon-wx" import'@/icons/svg/wx.svg'exportdefault{}创建constconstreq=require.context('./svg',false,/\.svg$/) <svg:class="svgClass"v-<use:xlink:href="iconName" exportdefaultprops:{{default:''}return`#icon-svgClass()if(this.className)return'svg-icon'+}elsereturn'svg-}}}}<stylewidthwidth:1em;vertical-align:-0.15em;fill:currentColor;overflow:hidden;}路由分为两种:constantRoutes和asyncRoutes,前者是默认路由可直接,后者中定义的路由路由守卫:创建./src/permission.js,并在main.js用户登录状态:用户登录->获取token////引入importstorefromrouter.beforeEach(async(to,from,next)=>////if(hasToken)if(to.path==='/login'){}else{//consthasRoles=store.getters.roles&&store.getters.roles.length>if(hasRoles)//}{tryconst{roles}=await//根据当前用户角色过滤出 路constaccessRoutes=await//继续路由切换,确保addRoutesnext({...to, ce:true}catch(error)出错需重置令牌并重新登录(令牌过期、网络错误等原因)awaitstore.dispatch('user/resetToken')alert(error||'未知错误}}}}else//未登录}可以当用户登录后向后端请求可的路由表,从而动态生成可页面,操作和原来是相同的,这里多了一步将后端返回路由表中组件名称和本地的组件映射步骤:////constmap=//xx:require('@/views/xx.vue').default//xx:()=> //}//服务端返回的asyncRoutesconstasyncRoutes=[{path:'/xx',component:'xx']//遍历asyncRoutes,将component替换为map[component] ponent(asyncRoutes){asyncRoutes.forEach(route ponent=map[ if(route.children){route.children.map(child }}}页面中某些按钮、有时候需要更细粒度权限控制,这时候可以封装一个指令-erisio在需要控制的按钮上,从而实现按钮级别权限控制<el-tab-panelabel="用户管理name="first"v-permission="['admin',<el-tab-panelabel="配置管理name="secondv-permission="['admin',<el-tab-panelabel="角色管理"name="third"v-<el-tab-panelabel="定时任务补偿"name=" "v-permission="['admin', <el-tab-panev- {methods:{{returnroles.some(role=>return}}}组件。创建侧边栏菜项目组件 创建侧边栏菜单项组件 api服务=>axios请求=>本地mock/线上mock/服务器npmiaxios-npmiaxios-数据本地mock:利用wckdevsrver提供的bore钩子可以expess实例,从而定义接口修改vucofis,给dvSevr添加相关代码诸如easy-mock这类线上moc工具优点是使用简单,moc工具库也比较强大,还能根据swagger生成接口。登录easy-若不可用,可以搭建本地easy-mock服务(node+redis+mongodb)先安装node8.x、redis和mongodb切nodev8nvmlistnvmuse起redis:redis-起mongodb:起easy-mock项目:npmrun////{"code":{const{username}if(username==="admin"||username==={return}{return}"data":{const{username}if(username==="admin"||username==={return}{return}}}//{code:"data":function({_req})VUE_APP_BASE_APIVUE_APP_BASE_API=常见的开发流程里,都有测试人员,他们不管内部实现机制,只看最外层的输入输出,这种我们称为黑 还有一种测试叫做白盒测试,我们针对一些内部实现逻辑编写测试代码,称之为单元测试。更负责一些的我们称之为集成测试,就是集合多个测试过的单元一起测试。减少研发新特性时产生的选择特性UnitTesting和E2E单元测试解决方案选择:集成Jestvueadd@vue/unit-集成cypressvueadd@vue/e2e-单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证。新建test/unit/kaikeba.spec.js,*.spec.js是命名规范functionfunctionadd(num1,{returnnum1+}//测试套件testsuitedescribe('Kaikeba',()=>{//测试用例testit('测试add函数',()=>//断言assertexpect(add(1,expect(add(1,expect(add(-2,执行:npmrundescribeit:定义一个测试用例expect:断言的判断条件这里面仅演示了toBe,断言vue提供了用于单元测试的实用工具库@vue/test-创建一 组 importimportKaikebafromdescribe('Kaikeba.vue',()=>//it('要求设置created生命周期',()=>{it('message初始值是vue-test',()=>//检查dataexpect(typeof//检查dataconstdefau ata=Kaikeba.data() importimport{mount}from'@vue/test-it("mount之后测data是开课吧",(){constwrapper=mount(Kaikeba);it("按钮点击后",()=>constwrapper=////测试html//Jest自带覆盖率,很容易统计我们测试代码是否全面。如果用的oca,需要使用istanbl"jest""jest":"collectCoverage":true,"collectCoverageFrom":["src/**/*.{js,vue}"],}若采用独立配置,则修改modulemodule.exports{"collectCoverageFrom":}在此执行npmrun %Lines行覆盖率(linecoverage):是不是每一行都执行了?可以看到我们kaikeba.vue的覆盖率是100% <span>{{message<button@click="changeMsg">点击 {data(){returnmessage:"vue-text",count:0created()this.message="开课吧{changeMsg()if(this.count>{this.message"count大于}elsethis.message="按钮点击}{this.count+=}}现在的代码,依然是测试没有报错,但是覆盖率只有%来,继续努力加测试吧VueTestUtils使用指南E2E运行E2Enpmnpmrun修改describe('端到端测试,抢测试人员的饭碗',(){it('先 一下',()=>{//cy.contains('h1',' etoYourVue.jsApp')cy.contains('span','开课吧')<div<imgalt="Vuelogo"<!-- oWorld etoYourVue.js

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论