在开发 UniApp Vue3 项目时,区分开发环境和生产环境使用不同的 API 地址是一个常见的需求。你可以通过多种方法来实现这一点,以下是几种推荐的方法:
方法 1:使用环境变量
1. 创建 .env
文件
在项目根目录下创建不同的 .env
文件来定义环境变量。例如:
.env.development
:用于开发环境.env.production
:用于生产环境
每个文件中可以定义一个 VITE_API_URL
变量来指定 API 地址:
# .env.development
VITE_API_URL=http://localhost:3000/api
# .env.production
VITE_API_URL=https://api.yourdomain.com
注意:变量名需要以 VITE_
开头,这样 Vite 才会将其作为环境变量暴露给客户端代码。
2. 在代码中使用环境变量
在你的代码中,可以通过 import.meta.env
来访问这些环境变量:
const apiUrl = import.meta.env.VITE_API_URL;
// 使用 apiUrl 进行 API 请求
axios.get(`${apiUrl}/endpoint`)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
方法 2:使用配置文件
1. 创建配置文件
在项目中创建一个 config
文件夹,并在其中添加两个配置文件:
dev.config.js
:用于开发环境的配置prod.config.js
:用于生产环境的配置
每个文件中定义 API 地址和其他配置项:
// dev.config.js
export default {
apiUrl: 'http://localhost:3000/api'
};
// prod.config.js
export default {
apiUrl: 'https://api.yourdomain.com'
};
2. 动态引入配置文件
根据当前环境动态引入相应的配置文件。可以在项目的入口文件(如 main.js
或 App.vue
)中进行判断:
// main.js
let config;
if (process.env.NODE_ENV === 'development') {
config = require('./config/dev.config.js').default;
} else {
config = require('./config/prod.config.js').default;
}
Vue.prototype.$config = config;
然后在组件或其他地方使用:
this.$axios.get(`${this.$config.apiUrl}/endpoint`)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
方法 3:使用插件或工具
使用 vite-plugin-env-compatible
如果你使用的是 Vite 构建工具,可以考虑使用 vite-plugin-env-compatible
插件来更好地管理环境变量。
- 安装插件:
npm install vite-plugin-env-compatible --save-dev
- 在
vite.config.ts
中配置插件:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import envCompatible from 'vite-plugin-env-compatible';
export default defineConfig({
plugins: [vue(), envCompatible()]
});
- 使用环境变量的方式与方法 1 类似。
方法 4:使用 HBuilderX 内置功能
HBuilderX 提供了内置的功能来管理不同环境下的配置:
- 打开 HBuilderX。
- 导航到
工具 -> 编译环境
。 - 选择或添加目标平台的编译环境,并为每个环境设置不同的 API 地址。
总结
通过以上方法,你可以轻松地在 UniApp Vue3 项目中区分开发和生产环境使用的 API 地址。推荐使用环境变量的方法,因为它简单且易于维护。确保你选择了最适合你项目需求的方法,并根据实际情况进行调整。