vue中怎么快速切换到各种环境,超级实用版

简介: vue中怎么快速切换到各种环境,超级实用版

vue中怎么快速切换到各种环境,超级实用版


  • 怎么在本地开发中快速随时切换 测试环境接口、仿真环境接口、线上环境接口?
  • 怎么在本地开发中随意使用console,但是线上环境或者任意环境快速去掉所有console?
  • 怎么快速实现其他任何因环境不同的需求?

如果上面的都知道了,就跳出此文吧~

实际开发中的应用

一个项目的访问地址可能有:本地环境、测试环境、仿真环境、正式环境。 一个项目的接口地址可能有:本地环境、测试环境、仿真环境、正式环境。

访问地址是什么决定的呢?

其实就是项目在哪台电脑上。在你本地,就是本地环境,以localhost或者10.xx访问。在测试服务器上,就会以测试的域名或者ip访问。仿真和正式的同理。

接口地址是什么决定的呢?

其实是接口的项目在哪台电脑上。在你本地,就是本地环境,以localhost或者10.xx访问。在测试服务器上,就会以测试的域名或者ip访问。仿真和正式的同理。

项目通过ajax请求接口,现在常用axios,所以项目理论上可以随意切换接口的地址。

但是,很多时候不同环境的接口的appid和appkey不一样,甚至,不同环境的接口地址也不完全相同,想要整个项目能一瞬间切换各种环境的接口,还是需要点准备工作的。

以下是vue中,将项目分为 本地环境、测试环境、仿真环境、正式环境 的步骤。以仿真环境为例。

1. 创建env

根目录下创建 .env.stage,变量需要用VUE_APP开头。只有NODE_ENV和BASE_URL可以单独使用,但有特定的含义。没特殊情况别用.env.production

VUE_APP_API_ORIGIN = 'http://test.com'
VUE_APP_API_COMMON_PATH = '/test/apis'
VUE_APP_APPKEY = 'key_test'
VUE_APP_APPID = '001'

2. 配置代理,简单的理论可以参照此文

根目录下,创建vue.config.js

const API_ORIGIN = process.env.VUE_APP_API_ORIGIN
const API_COMMON_PATH = process.env.VUE_APP_API_COMMON_PATH
const APPKEY = process.env.VUE_APP_APPKEY
const APPID = process.env.VUE_APP_APPID
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: API_ORIGIN,
        pathRewrite: { '^/api': API_COMMON_PATH },
        ws: true,
        changeOrigin: true
      }
    }
  }
}

3. 配置axios,更加深度的参照本文,特别棒

一般创建src/common/instance.js,如果有sign的规则,增加src/common/sign.js

npm i crypto-js qs axios

/**
  sign.js
**/
import md5 from 'crypto-js/md5'
const APPKEY = process.env.VUE_APP_APPKEY
const APPID = process.env.VUE_APP_APPID
// 一般会有sign这个参数,有特定的生成规则 这边是字典排序之后加上appid,MD5
export const getSignStr = params => {
  // 将key按照字典顺序排列
  let orderdKeys = Object.keys(params).sort()
  // 拿到string的字符串
  let str = ''
  orderdKeys.forEach(key => {
    const value = params[key]
    // 接口的参数为空的时候不参加sign,特殊情况,key是file的时候不参加sign
    const isCanSign = !(key === 'file')
    isCanSign && (str += `${key}=${value}&`)
  })
  // 前面加上appid 后面加上 appkey
  str = `appid=${APPID}&appkey=${APPKEY}&${str}appkey=${APPKEY}&appid=${APPID}`
  // 转小写 => md5 => 转大写
  str = str.toLocaleLowerCase()
  str = md5(str).toString()
  str = str.toLocaleUpperCase()
  return str
}
/**
  instance.js
**/
import axios from 'axios'
import Qs from 'qs'
import { getSignStr } from './sign'
const API_ORIGIN = process.env.VUE_APP_API_ORIGIN
const API_COMMON_PATH = process.env.VUE_APP_API_COMMON_PATH
const APPID = process.env.VUE_APP_APPID
let instance = axios.create({
  // 超时时间
  timeout: 1000 * 20,
  // 如果接口希望接口对象形式,下面就是多余的!!!! 若接口希望收到的数据格式  a=1&b=2,前端传参数的时候希望直接写成对象,然后再这边统一变成字符串传给接口
  transformRequest: [
    function (data) {
      return Qs.stringify(data)
    }
  ]
})
// 请求的时候只是传入路径,这边根据路径加上域名
const getFullApiPath = path => API_ORIGIN + API_COMMON_PATH + path
// 一般很多接口会有appid sign 这样的公共参数
const getFullParams = params => {
  let commonParams = { appid: APPID, sign: getSignStr(params) }
  params = { ...commonParams, ...params }
  return params
}
// 请求拦截器 一般处理所有请求的通用逻辑
instance.interceptors.request.use(
  // config是关于此次请求所有的信息
  config => {
      const API_ORIGIN = process.env.VUE_APP_API_ORIGIN
const API_COMMON_PATH = process.env.VUE_APP_API_COMMON_PATH
    // 打包的时候,才将接口加上origin,当然如果访问地址和接口地址同源的话,这行就不用了
    process.env.NODE_ENV === 'production' && && (config.url = getFullApiPath(config.url))
    // 增加公共参数 appid sign,post的请求体是data,get只能是params
    config.method === 'post' ? (config.data = getFullParams(config.data)) : (config.params = getFullParams(config.params))
    return config
  },
  error => Promise.error(error)
)
// 响应拦截器 统一处理错误之类的
// instance.interceptors.response.use()
export default instance
// 创建`src/common/api.js`
import instance from './instance'
const AjaxAjaxGetQuartersList = (uid) => {
  return instance.post('/api/Index', { uid })
}
export {
  AjaxAjaxGetQuartersList
}

4. 配置package.json

"scripts": {
    "serve-stage": "vue-cli-service serve --mode stage",
    "build-stage": "vue-cli-service build --mode stage",
  },

5. 根据需求,随意切换命令,就可以切换环境了

  • 本地开发的时候,想要切换到仿真环境的接口,运行npm run serve-stage
  • 想要打仿真环境的包,运行 npm run build-stage
  • 想要其他环境,重复上面4步,因为第三步配置axios就不用了,哈哈哈

想要在访问的哪种环境去掉console

比如想要在访问显示线上地址的时候去掉console

1. 配置.env.prod

VUE_APP_HAS_CONSOLE = 0
VUE_APP_API_ORIGIN = 'http://prod.com'
VUE_APP_API_COMMON_PATH = '/apis'
VUE_APP_APPKEY = 'key_prod'
VUE_APP_APPID = '004'

2. 配置vue.config.js

npm i terser-webpack-plugin -D

const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
  configureWebpack({
    optimization: {
      minimizer: [new TerserPlugin({ terserOptions: { compress: { drop_console: process.env.VUE_APP_HAS_CONSOLE === 0 } } })]
    }
  })
}

3. 配置package.json

"scripts": {
    "build-stage": "vue-cli-service build --mode prod",
  },

4. 运行合适的命令

想要访问线上环境的时候,不要console,运行npm run build-prod

抛转引玉

哪个环境不要console不过是个引子。其他的因为环境不同的需求,基本可以用这个逻辑。^(* ̄(oo) ̄)^

对了,这句话可以记着。有天突然就理解了。

vuecli中,vue-cli-service serve的NODE_ENV是development,serve其实就是本地开发的时候用,vue-cli-service build的NODE_ENV是production,build其实就是打包部署到服务器的时候用。

参考资料

目录
相关文章
|
12月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
864 2
|
11月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
732 137
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1576 0
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
857 17
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
930 1
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
646 0
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
931 1
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
1175 0
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
653 0