原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
Vue
【Vue3】env环境变量的配置和使用(区分cli和vite)
文章目录
- Vue
- 前言
- 一、常见用法
- 二、vue3+cli封装接口
- 1..env配置
- 2..dev(开发环境,其他环境自己配置)
- 3.vue.config.js文件
- 4.封装axios请求
- 4.1 在api文件夹中新建request.js
- 4.2 新建接口rule.js
- 4.3 新建index.js
- 4.4 App.vue引用
- 4.5 全局使用api
前言
一、常见用法
我们将创建api文件夹,包含index.js和request.js,剩下的rule.js就是实际接口文件。
二、vue3+cli封装接口
vue3+cli的项目,配置中需要以VUE_APP开头。
1…env配置
VUE_APP_PORT = 8080
2…dev(开发环境,其他环境自己配置)
VUE_APP_API_HOST = '127.0.0.1'
VUE_APP_API_HOST = '8000'
VUE_APP_API_BASE_URL = "http://127.0.0.1:8000/api"
VUE_APP_ENV = 'development'
3.vue.config.js文件
如果项目没有此文件,需要自己创建,位置参考第一部分截图。
这里的devServer配置表示代理,即将前端的host、port和路由代理至api接口。其中’/api’很重要,后边会用到。
下述代码表示将http://127.0.0.1:8080/api代理至http://127.0.0.1:8000/api)
const {
defineConfig
} = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
assetsDir: 'static',
devServer: {
// host: process.env.VUE_APP_HOST,
// port: process.env.VUE_APP_PORT, //端口
// https: false, //false关闭https,true为开启
// open: true, //自动打开浏览器
proxy: {
'/api': {
target: process.env.VUE_APP_API_BASE_URL,
changeOrigin: true,
pathRewrite: {
'/api': ''
}
}
}
}
})
4.封装axios请求
4.1 在api文件夹中新建request.js
这里的baseURL: “/api"中的”/api",与第三部的代理一致。
// 导入axios
import axios from 'axios'
const request = axios.create({
// baseURL 将自动加在 url`前面,除非 url 是一个绝对 URL。
// 它可以通过设置一个 baseURL 便于为 axios 实例的方法传递相对 URL
baseURL: "/api",
// timeout设置一个请求超时时间,如果请求时间超过了timeout,请求将被中断,单位为毫秒(ms)
timeout: 60000,
// headers是被发送的自定义请求头,请求头内容需要根据后端要求去设置,这里我们使用本项目请求头。
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
})
// 请求拦截器
request.interceptors.request.use(
config => {
// 在请求发送之前可以做一些处理,比如添加请求头等
return config;
},
error => {
// 请求错误处理
return Promise.reject(error);
}
);
// 响应拦截器
request.interceptors.response.use(
response => {
// 在这里可以对响应数据进行处理
return response.data;
},
error => {
// 响应错误处理
return Promise.reject(error);
}
)
export default request
4.2 新建接口rule.js
import request from './request.js'
export function getrules(params) {
return request({
url: '/rule/rule/',
method: 'get',
params: params
})
}
export function postrule(data) {
return request({
method: 'post',
data: data,
url: '/rules'
})
}
export function updaterule(id, data) {
return request({
method: 'post',
data: data,
url: '/rules/${id}'
})
}
export default {
getrules,
postrule,
updaterule,
}
4.3 新建index.js
import rule from './rule.js'
export default {
rule,
}
4.4 App.vue引用
<script setup>
import {
rule
} from '@/api/rule.js'
console.log('hello script setup2', rule.getrules())
</script>
4.5 全局使用api
修改项目的main.js文件,加载全局属性
import {
createApp
} from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import router from "./router";
import store from "./store";
import api from "./api";
const app = createApp(App)
app.config.globalProperties.$api = api // 挂载全局
app.use(router).use(store).use(ElementPlus).mount('#app')
vue3一般的script
<script>
// 请求rules
function get() {
console.log(this.$api.rule.getrules())
}
</script>
vue3一般的script+setup
<script setup>
// 请求rules
const cns = getCurrentInstance()
console.log(cns.appContext.config.globalProperties.$api)
console.log('hello script setup')
function get() {
console.log(cns.appContext.config.globalProperties.$api.rule.getrules())
}
</script>