一、使用vue-cli脚手架创建一个项目,根据我们开发所需生成固定的文件目录(可配置)。

 二、创建好项目之后,还并不能开始真正的开发,我们需要做一些开发前的准备,比如请求的axios封装,多环境的地址配置,解决本能地开发跨域等等,做好准备,在后续开发中会有一劳永逸的感觉哦~。

1、多环境的地址配置

  • 根据启动命令Vue会自动加载对应的环境,同时其会读取相对应的环境配置文件。
  • 在package.json文件中配置好不同环境的打包运行命令
"scripts": {
"dev": "npm run serve", // 本地运行,环境为development
"serve": "vue-cli-service serve",
"build": "vue-cli-service build", // 打生产包 会去读取 .env.product的配置
"build:test": "vue-cli-service build --mode test", // 打测试包 会去读取 .env.test的配置
"lint": "vue-cli-service lint"
},
  • 在项目根目录下以.env开头创建不同环境下的地址配置文件,文件里可以配置相应的地址。

2、跨域处理和一些基本配置

在项目根目录创建vue.config.js文件(脚手架帮我们封装好了一套webpack配置,我们有需要的话叠加就好了,不用再写一遍基本配置)

(1)本地开发跨域:通过proxy代理真实请求的地址

(2)配置文件快捷路径: 通过alias配置快捷

(3)配置全局样式:需要先下载对应的插件,这里用了less,需要先下载less, less-loader,style-resources-loader,vue-cli-plugin-style-resources-loader这四个插件(少下载都会导致样式无效哦~)

const path = require('path')

const devServerConfig = {
proxy: {
'/my-web': {
target: process.env.url, // 需要代理的后端地址
changeOrigin: true,
secure: false,
},
},
port: 8080,
} module.exports = {
devServer: devServerConfig,
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [path.resolve(__dirname, './src/assets/styles/base.less')], // 可以设置多个
},
}, // 设置快捷路径
chainWebpack: config => {
config.resolve.alias
.set('@api', path.resolve(__dirname, './src/api'))
.set('@assets', path.resolve(__dirname, './src/assets'))
.set('@components', path.resolve(__dirname, './src/components'))
.set('@views', path.resolve(__dirname, './src/views'))
}
}

3、axios的封装

在src目录下创建一个api文件夹(名字可以自定义)

// httpError.js 公共错误提示的js
const ErrorMap = new Map([
[400, '请求错误'],
[401, '未授权,请重新登录'],
[403, '拒绝访问'],
[404, '请求错误,未找到该资源'],
[405, '请求方法未允许'],
[408, '请求超时'],
[500, '服务器端出错'],
[501, '网络未实现'],
[502, '网络错误'],
[503, '服务不可用'],
[504, '网络超时'],
[505, 'http版本不支持该请求'],
]) export const getErrorMessage = (status) => {
if (ErrorMap.has(status)) {
return ErrorMap.get(status)
} else {
return '连接错误,请联系管理员'
}
}

(1)使用一:将每个请求都写成独立的请求函数,组件中引用调用。

优点:多个地方调用,如果接口有变动,直接改这个函数即可(比如请求方法、接口路径等发声改变)

// http.js
import axios from 'axios'
import Vue from 'vue'
import router from '@/router'
import { getErrorMessage } from '@assets/js/httpError' const Axios = axios.create({
baseURL: '/my-web',
timeout: 5000,
}) // 添加请求拦截器
Axios.interceptors.request.use(req => {
let token = localStorage.getItem('_a')
token && (req.headers.Authorization = token)
return req
}, err => {
return Promise.reject(err)
}) // 响应拦截器
Axios.interceptors.response.use(res => {
if (res.data.code === '0') {
return {
data: res.data.data,
response: res,
}
} else {
return Vue.prototype.$message.error(res.data.message)
}
}, err => {
let status
if (err && err.response) {
status = err.response.status
err.message = getErrorMessage(status)
Vue.prototype.$message.error(err.message)
}
if (status === 401) {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}
return Promise.reject(err)
}) export default Axios
// home.js
import http from './http' // 获取主页信息
export const getHomeInfo = () => http({
url: '/home/info',
method: 'get',
})
// xxx功能接口
export const xxxx = () => http({
url: '/home/xxx',
method: 'get',
})
...
// vue文件中调用请求函数
<script>
import { getHomeInfo } from '@api/home' export default {
mounted() {
this.getData()
},
methods: {
  
async getData () {
let { data } = await getHomeInfo()
}
},
}
</script>

(2)使用方法二:在第一种axios封装的基础上,再针对不同类型请求封装,api文件只维护请求接口的url

优点:需要改变请求路径时,只需改动url的配置文件

// http.js

import axios from 'axios'
import Vue from 'vue'
import router from '@/router'
import { getErrorMessage } from '@assets/js/httpError' const Axios = axios.create({
baseURL: '/my-web',
timeout: 5000,
}) // 添加请求拦截器
Axios.interceptors.request.use(req => {
let token = localStorage.getItem('_a')
token && (req.headers.Authorization = token)
return req
}, err => {
return Promise.reject(err)
}) // 响应拦截器
Axios.interceptors.response.use(res => {
if (res.data.code === '0') {
return {
data: res.data.data,
response: res,
}
} else {
return Vue.prototype.$message.error(res.data.message)
}
}, err => {
let status
if (err && err.response) {
status = err.response.status
err.message = getErrorMessage(status)
Vue.prototype.$message.error(err.message)
}
if (status === 401) {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}
return Promise.reject(err)
}) // 封装的请求函数
function request(url, methods, params, option = {}) {
let headers
if (option.headers) headers = option.headers
return Axios({
url,
methods,
headers,
data: ['POST', 'PUT'].includes(methods) ? params : null,
params: ['GET', 'DELETE'].includes(methods) ? params : null,
})
}
// 暴露给vue文件使用的请求方法
export const getData = (url, params, option) => {
return request(url, 'GET', params, option)
}
export const postData = (url, params, option) => {
return request(url, 'POST', params, option)
}
export const putData = (url, params, option) => {
return request(url, 'PUT', params, option)
}
export const deleteData = (url, params, option) => {
return request(url, 'DELETE', params, option)
}
// url.js
export default {
login: '/login',
homeInfo: '/home/info',
...
}

有两张方式去调用请求:

  • 在vue文件中直接引入url
<script>
import url from '@api/url'
import { getData } from '@api/http' export default {
mounted() {
this.getHomeInfo()
},
methods: {
async getHomeInfo () {
// url.homeInfo:接口地址
let { data } = await getData(url.homeInfo)
console.log(24, data)
}
},
}
</script>
  • 在Vue原型上挂在url,vue文件中直接获取到this.$url.xxx接口
// main.js文件中加入以下代码,将url挂在到vue实例上

import url from './api/url'
Vue.prototype.$url = url // vue 文件中 <script>
import { getData } from '@api/http' export default {
mounted() {
this.getHomeInfo()
},
methods: {
async getHomeInfo () {
// 直接通过vue拿到url
let { data } = await getData(this.$url.homeInfo)
console.log(24, data)
}
},
}
</script>

看个人习惯选择要那种~

3、路由的处理

  • 可以将路由按照页面结构拆分成多个文件引入,便于维护(建议)
  • 也可以直接在页面中写完全部路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue' Vue.use(VueRouter) // 解决重复点击相同路由控制台报错问题
const VueRouterPush =VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
return VueRouterPush.call(this, to).catch(err => err)
} const routes = [
{
path: '/',
name: 'Home',
component: Home
},
]
router.beforeEach((to, from, next) => {
// 进入每个路由前会先进这个函数,一般对身份的验证,路由页面的验证可以放在这里
})
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
}) export default router

4、配置eslint

创建一个VUE项目,正式开发之前要做的配置~的更多相关文章

  1. 创建一个vue项目的过程

    创建一个vue项目: 1.首先从UI手上拿到PSD设计图,然后看设计搞的内容,需要做个大概的页面布局 2.做vue之前不许安装node,因为做vue项目要和node结合使用 3.然后安装vue脚手架: ...

  2. 开始创建一个 Vue 项目

    开始创建一个 Vue 项目 安装 nodejs 略 安装 npm 默认安装时自带了 npm 安装 cnpm 为了更快的下载组件,使用cnpm,cnpm 是淘宝前端的镜像. 使用 npm 安装 cnpm ...

  3. 使用命令行工具npm新创建一个vue项目

    使用vue开发项目的前期工作可以参考前面写的:  Vue环境搭建及node安装过程整理 Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的 ...

  4. 超详细!新手如何创建一个Vue项目

    目录 一.在官网下载Vue.js 二.使用<script>标签直接引入本地的vue.js 三.使用CDN引入Vue.js 四.验证是否安装成功 五.安装Vue Devtools浏览器调试插 ...

  5. 使用vue-cli创建一个vue项目

    安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...

  6. 快速创建一个vue项目

    vue脚手架 用来创建vue项目的工具包 创建项目: npm install -g vue-cli vue init webpack VueDemo 开发环境运行: cd VueDemo npm in ...

  7. 新手如何创建一个vue项目 ---vue---新手创建第一个项目

    1.第一步安装node.js https://nodejs.org/en/ 前期可以下载软件包,后期熟练以后可以通过nvm进行 Node的版本切换以及升级 然后window+r  输入cmd 打开命令 ...

  8. 创建一个vue 项目 必备的几个插件

    第一步npm安装 首先:先从nodejs.org中下载nodejs 打开控制命令行程序(CMD),node -v 检查是否正常 使用淘宝NPM 镜像 npm  install  -g  cnpm  - ...

  9. 创建一个vue项目,vue-cli,webpack

    ,换成淘宝源: npm config set registry https://registry.npm.taobao.org/ 检查是否修改成功 npm config get registry ,安 ...

  10. 使用VSCode创建一个Vue项目

    vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v          //(版本低引起:bas ...

随机推荐

  1. java 两个对象copy,并移除或添加一些属性

    前言 目前遇到了 后端查到的数据和我想给前端返回的数据 不太一致的困惑. 因为不想因为返回给前端少一个字段,我这边就用不成了select *. 所以听了@朱杰 大佬的建议,这样搞. 其实这样我也不满意 ...

  2. 【6】树形DP学习笔记

    前言 教练说过,树形 DP 是一个抽象的东西,很多状态比较难以理解,后面具体的学习方法,忘了. UPD on \(2024.11.21\):修复了例题 \(5\) 的假做法和假代码. 普通树形 DP ...

  3. POLIR-Society-Organization-Psychology-Persuasion: The ELM(Elaboration Likelihood Model) of Persuasion Explained

    https://www.verywellmind.com/the-elaboration-likelihood-model-of-persuasion-7724707 Theories > So ...

  4. SciTech-EE-Virtual Electronics Lab: How to Create an Oscilloscope Using Python and ADALM2000

    https://wiki.analog.com/university/tools/m2k Virtual Electronics Lab: How to Create an Oscilloscope ...

  5. 企业AI知识库的文件解析痛点-Word格式解析优化(准确率95%)-100%开源

    一.前言 在大模型和RAG(检索增强生成)技术飞速发展的今天,企业AI知识库建设已成为AI落地的核心战场.而文件解析是所有参与做企业AI知识库开发者所避免不了的难题. 本文将结合我在开发TorchV ...

  6. Unity中Inspector面板显示提示

    效果如下 上面有个 "可选变量"  ,然后鼠标移动到变量上会显示一段文字 实现方法 [Header("可选变量")]//直接显示汉字在面板上 [Tooltip( ...

  7. SQLcl:不仅是 SQL*Plus 的继任者,更是 AI 时代的连接器

    在 Oracle 数据库的世界里,SQL*Plus 是开发和管理工作的标配工具.但随着数据库技术的演进和 AI 能力的嵌入,传统工具已无法满足现代数据开发.智能交互和自动化运维的需求. Oracle ...

  8. Dify新版1.7发布,这2个重要更新你必须知道!

    Dify 又发布新版了,这次也是直接从 V1.6.0 升级到 V1.7.0 了,那这次升级的主要内容是啥呢?接下来我们一起来看. 这次升级除了修复了一些列 BUG 和部分功能优化之外,最大的升级是提升 ...

  9. 单片机+4G模块和主流物联网平台实现MQTT协议通信视频教程

    单片机+4G模块和主流物联网平台实现MQTT协议通信视频教程 1.单片机+4G模块和阿里云物联网平台实现MQTT协议通信视频教程单片机+4G模块和阿里云物联网平台实现MQTT协议通信,阿里云物联网平台 ...

  10. (译) 理解 Elixir 中的宏 Macro, 第五部分:组装 AST

    Elixir Macros 系列文章译文 [1] (译) Understanding Elixir Macros, Part 1 Basics [2] (译) Understanding Elixir ...