手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

alias

当项目逐渐变大之后,文件与文件直接的引用关系会很复杂,这时候就需要使用alias 了。 有的人喜欢alias 指向src目录下,再使用相对路径找文件

resolve: {

alias: {

‘~’: resolve(__dirname, ‘src’)

}

}

//使用

import stickTop from ‘~/components/stickTop’

复制代码

或者也可以

alias: {

‘src’: path.resolve(__dirname, ‘…/src’),

‘components’: path.resolve(__dirname, ‘…/src/components’),

‘api’: path.resolve(__dirname, ‘…/src/api’),

‘utils’: path.resolve(__dirname, ‘…/src/utils’),

‘store’: path.resolve(__dirname, ‘…/src/store’),

‘router’: path.resolve(__dirname, ‘…/src/router’)

}

//使用

import stickTop from ‘components/stickTop’

import getArticle from ‘api/article’

复制代码

没有好与坏对与错,纯看个人喜好和团队规范。


ESLint


不管是多人合作还是个人项目,代码规范是很重要的。这样做不仅可以很大程度地避免基本语法错误,也保证了代码的可读性。这所谓工欲善其事,必先利其器,个人推荐 eslint+vscode 来写 vue,绝对有种飞一般的感觉。效果如图:

eslintGif.gif

每次保存,vscode就能标红不符合eslint规则的地方,同时还会做一些简单的自我修正。安装步骤如下:

首先安装eslint插件

eslint1.png

安装并配置完成 ESLint 后,我们继续回到 VSCode 进行扩展设置,依次点击 文件 > 首选项 > 设置 打开 VSCode 配置文件,添加如下配置

“files.autoSave”:“off”,

“eslint.validate”: [

“javascript”,

“javascriptreact”,

“html”,

{ “language”: “vue”, “autoFix”: true }

],

“eslint.options”: {

“plugins”: [“html”]

}

复制代码

这样每次保存的时候就可以根据根目录下.eslintrc.js你配置的eslint规则来检查和做一些简单的fix。这里提供了一份我平时的eslint规则地址,都简单写上了注释。每个人和团队都有自己的代码规范,统一就好了,去打造一份属于自己的eslint 规则上传到npm吧,如饿了么团队的 config,vue的 config

vscode 插件和配置推荐


封装 axios


我们经常遇到一些线上 的bug,但测试环境很难模拟。其实可以通过简单的配置就可以在本地调试线上环境。 这里结合业务封装了axios ,线上代码

import axios from ‘axios’

import { Message } from ‘element-ui’

import store from ‘@/store’

import { getToken } from ‘@/utils/auth’

// 创建axios实例

const service = axios.create({

baseURL: process.env.BASE_API, // api的base_url

timeout: 5000 // 请求超时时间

})

// request拦截器

service.interceptors.request.use(config => {

// Do something before request is sent

if (store.getters.token) {

config.headers[‘X-Token’] = getToken() // 让每个请求携带token–[‘X-Token’]为自定义key 请根据实际情况自行修改

}

return config

}, error => {

// Do something with request error

console.log(error) // for debug

Promise.reject(error)

})

// respone拦截器

service.interceptors.response.use(

response => response,

/**

  • 下面的注释为通过response自定义code来标示请求状态,当code返回如下情况为权限有问题,登出并返回到登录页

  • 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中

*/

// const res = response.data;

// if (res.code !== 20000) {

// Message({

// message: res.message,

// type: ‘error’,

// duration: 5 * 1000

// });

// // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;

// if (res.code === 50008 || res.code === 50012 || res.code === 50014) {

// MessageBox.confirm(‘你已被登出,可以取消继续留在该页面,或者重新登录’, ‘确定登出’, {

// confirmButtonText: ‘重新登录’,

// cancelButtonText: ‘取消’,

// type: ‘warning’

// }).then(() => {

// store.dispatch(‘FedLogOut’).then(() => {

// location.reload();// 为了重新实例化vue-router对象 避免bug

// });

// })

// }

// return Promise.reject(‘error’);

// } else {

// return response.data;

// }

error => {

console.log(‘err’ + error)// for debug

Message({

message: error.message,

type: ‘error’,

duration: 5 * 1000

})

return Promise.reject(error)

})

export default service

复制代码

import request from ‘@/utils/request’

//使用

export function getInfo(params) {

return request({

url: ‘/user/info’,

method: ‘get’,

params

});

}

复制代码

比如后台项目,每一个请求都是要带 token 来验证权限的,这样封装以下的话我们就不用每个请求都手动来塞 token,或者来做一些统一的异常处理,一劳永逸。 而且因为我们的 api 是根据 env 环境变量动态切换的,如果以后线上出现了bug,我们只需配置一下 @/config/dev.env.js 再重启一下服务,就能在本地模拟线上的环境了。

module.exports = {

NODE_ENV: ‘“development”’,

BASE_API: ‘“https://api-dev”’, //修改为’“https://api-prod”'就行了

APP_ORIGIN: ‘“https://wallstreetcn.com”’ //为公司打个广告 pc站为vue+ssr

}

复制代码

妈妈再也不用担心我调试线上bug了。 当然这里只是简单举了个例子,axios还可以执行多个并发请求,拦截器什么的,大家自行去研究吧。


多环境


vue-cli 默认只提供了devprod两种环境。但其实正真的开发流程可能还会多一个sit或者stage环境,就是所谓的测试环境和预发布环境。所以我们就要简单的修改一下代码。其实很简单就是设置不同的环境变量

“build:prod”: “NODE_ENV=production node build/build.js”,

“build:sit”: “NODE_ENV=sit node build/build.js”,

复制代码

之后在代码里自行判断,想干就干啥

var env = process.env.NODE_ENV === ‘production’ ? config.build.prodEnv : config.build.sitEnv

复制代码

新版的 vue-cli 也内置了 webpack-bundle-analyzer 一个模块分析的东西,相当的好用。使用方法也很简单,和之前一样封装一个 npm script 就可以。

//package.json

“build:sit-preview”: “cross-env NODE_ENV=production env_config=sit npm_config_preview=true npm_config_report=true node build/build.js”

//之后通过process.env.npm_config_report来判断是否来启用webpack-bundle-analyzer

var BundleAnalyzerPlugin = require(‘webpack-bundle-analyzer’).BundleAnalyzerPlugin

webpackConfig.plugins.push(new BundleAnalyzerPlugin())

复制代码

效果图

analyzer.png

webpack-bundle-analyzer这个插件还是很有用的,对后期的代码优化什么的,最重要的是它够装逼~


前后端交互


每个公司都有自己一套的开发流程,没有绝对的好与坏。这里我来讲讲我司的前后端交互流程。

跨域问题

首先前后端交互不可避免的就会遇到跨域问题,我司现在全是用 cors来解决的,如果你司后端嫌麻烦不肯配置的话,dev环境也可以通过 webpack-dev-serverproxy来解决,开发环境用nginx反代理一下就好了,具体配置这里就不展开了。

前后端的交互问题

其实大家也知道,平时的开发中交流成本占据了我们很大一部分时间,但前后端如果有一个好的协作方式的话能解决很多时间。我司开发流程都是前后端和产品一起开会讨论项目,之后后端根据需求,首先定义数据格式和api,然后 mock api 生成好文档,我们前端才是对接接口的。这里推荐一个文档生成器 swaggerswagger是一个REST APIs文档生成工具,可以在许多不同的平台上从代码注释中自动生成,开源,支持大部分语言,社区好,总之就是一个强大,如下图的api 文档(swagger自动生成,ui忽略)

api 地址,需要传是没参数,需要的传参类型,返回的数据格式什么都一清二楚了。

前端自行mock

如果后端不肯来帮你 mock 数据的话,前端自己来 mock 也是很简单的。你可以使用mock server 或者使用 mockjs + rap 也是很方便的。 不久前出的 easy-mock也相当的不错,还能结合 swagger。 我们大前端终于不用再看后端的脸色了~

iconfont

element-ui 默认的icon不是很多,这里要安利一波阿里的iconfont简直是神器,不管是公司项目还是个人项目都在使用。它提供了png,ai,svg三种格式,同时使用也支持unicode,font-class,symbol三种方式。由于是管理后台对兼容性要求不高,楼主平时都喜欢用symbol,晒一波我司后台的图标(都是楼主自己发挥的)。

iconfont.png

详细具体的使用可以见文章 手摸手,带你优雅的使用 icon


router-view


different router the same component vue。真实的业务场景中,这种情况很多。比如

router-view.png

我创建和编辑的页面使用的是同一个component,默认情况下当这两个页面切换时并不会触发vue的created或者mounted钩子,官方说你可以通过watch $route的变化来做处理,但其实说真的还是蛮麻烦的。后来发现其实可以简单的在 router-view上加上一个唯一的key,来保证路由切换时都会重新渲染触发钩子了。这样简单的多了。

computed: {

key() {

return this. r o u t e . n a m e ! = = u n d e f i n e d ? t h i s . route.name !== undefined? this. route.name!==undefined?this.route.name + +new Date(): this.$route + +new Date()

}

}

复制代码


优化

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

前端面试题汇总


前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~

感悟

前端面试题汇总


前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~

感悟

春招面试的后期,运气和实力都很重要,自己也是运气比较好,为了回馈粉丝朋友们(毕竟自己也玩了这么久哈哈哈),整理个人感悟和总结以上。最后祝愿大家能够收获理想offer!!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值