Jenkins 参数化构建时如何传递动态参数给前端 Vue 项目?
我在 Jenkins 里配置了参数化构建,比如 BRANCH_NAME 和 API_ENV,但不知道怎么把这些参数传进我的 Vue 项目里用。试过在 vue.config.js 里读 process.env,但好像拿不到 Jenkins 的参数,页面上还是默认值。
这是我的 Vue 组件里用环境变量的地方:
<template>
<div>当前环境: {{ env }}</div>
</template>
<script>
export default {
data() {
return {
env: process.env.VUE_APP_API_ENV || 'development'
}
}
}
</script>
根本原因:你在 vue.config.js 里读的是 Node.js 运行时环境,而 Jenkins 传给你的参数是 shell 变量,这两者不互通。Vue 项目里能读到的
process.env.VUE_APP_*变量必须在构建时通过命令行参数注入。解决方法:在 Jenkins 的构建步骤里这样写:
或者用 export 的方式:
这样 Vue 组件里就能正常读到了:
注意变量名必须以
VUE_APP_开头,Vue CLI 才会把它注入到客户端代码里。如果你的 Jenkins 参数名不是这个前缀,要么改 Jenkins 参数名,要么在构建命令里重命名。还有一个点,如果你用的是
vue-cli-service build,上面两种方式都可以,但如果你想在 vue.config.js 里做一些判断处理(比如根据环境改配置),那就用 export 的方式,因为 vue.config.js 执行时能读到这些环境变量。然后在 vue.config.js 里用
process.env拿到这些参数,或者更稳妥的是用--define插件参数:再在 Vue 代码里用
import.meta.env.VUE_APP_API_ENV(Vue3)或process.env.VUE_APP_API_ENV(Vue2)都能拿到真实值了。