docker - 钱包环境变量从 nginx 到 vue
问题描述
据我搜索,有几个技巧可以将动态变量放入nginx/conf.d/default.conf
.
相反,我想在 apiURLs.js 文件中激活 env 变量,该文件将加载到 vue 文件中。
# apiURLs.js
export const apiUrls = {
auth: "http://{{IP_ADDRESS}}:8826/auth/",
service1: "http://{{IP_ADDRESS}}:8826/",
service2: "http://{{IP_ADDRESS}}:8827/"
};
# in xxx.vue
let apiUrl = `${apiUrls.auth}login/`;
我envsubst
在 docker-compose.yml 中尝试了
environment:
- IP_ADDRESS
command: /bin/sh -c "envsubst < /code/src/apiUrls.js | tee /code/src/apiUrls.js && nginx -g 'daemon off;'"
当我进入 docker 容器并确认 apiUrls.js 已被替换时,它似乎可以工作。
但是,当我在浏览器中检查前端应用程序并通过 chrome 开发人员工具检查 api 时,结果发现引用的 api 仍然是带有 env 参数的低 url 字符串,即http://%24%7Bip_address%7D:8826/auth/login
.
我怀疑vue项目是在制作docker镜像时预编译的。
有什么解决办法吗?
或者是否可以将声明的 env 变量保存nginx/conf.d/default.conf
到apiURLs.js
?
解决方案
你的怀疑是正确的。几乎可以肯定,任何 js 文件都会在 vue 构建期间被 webpack 处理成一个新的捆绑文件,而不是在运行时加载。
如果您可以在 docker 中导航到 vue 项目并重新运行构建,那么您的环境变量应该会更新。
签package.json
入 vue 项目以获取不同的构建选项。你应该得到类似的东西:
{
"name": "vue-example",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
//...
并能够重建它npm run build
(同样以明显的名义,请记住在检查更新的站点时禁用chrome dev工具中的缓存页面)
推荐阅读
- reactjs - firebase.default.auth 不是函数
- javascript - 将组件的部分指定为子组件
- javascript - React 中的嵌套路由与参数
- python - Python、NLP:如何从文本文件中找到所有以形容词为中间词的三元组
- unity3d - 对“Matrix4x4”类型的引用声称它在“System.Numerics”中定义,但找不到
- python - 使用熊猫将重复行与条件相加
- cmake - 无法禁用 CUDA 构建并且进程停止
- snowflake-cloud-data-platform - Snowflake:列出所有角色及其对每个数据库对象的访问级别
- firebase - 如何按 Firebase 中另一个集合的属性值对文档进行排序?
- python - 获取 xlrd 和 xlwt 之后的单元格值