在 vue 的原型上注入配置文件,配置文件通过异步 http 访问获取,如何控制初始化顺序?

2021-01-15 10:21:33 +08:00
 darknoll

使用的脚手架是 vue-cli4, 现在需求是这样的,要实现前端的可配置化,比如 axios 访问的 http 地址可配置,这样就在 public 文件夹中增加一个 config 的文件夹,里面专门放一些 json 配置文件。 因为要在 js 文件中访问这些全局配置,所以我打算把这些配置挂载到 vue 的原型,然后在 main.js 中这样做 !(async () => { await axios.get('configs.json').then(response => { Vue.prototype.$config = response.data }) })()

new Vue({ router, store, render: h => h(App) }).$mount('#app')

那么我现在有个问题,如果配置文件体积过大,导致在其他 js 使用配置项的时候还没有返回,应该怎么处理这种情况?也就是说,我最好把获取 configs.json 同步化,不需要异步获取配置文件,但是访问 public 中的东西又没办法直接 import,有没有啥好的方案处理这种情景?

1338 次点击
所在节点    程序员
13 条回复
1KN6sAqR0a57no6s
2021-01-15 11:05:48 +08:00
你把 new Vue 也放到 axios 请求的 callback 里不就好了

还有你这个
!(async () => { await axios.get('configs.json').then(response => { Vue.prototype.$config = response.data }) })()
写得好奇怪,感叹号是什么意思,用了 async/await 为什么还要用 then
换成 axios.get('configs.json').then(response => { Vue.prototype.$config = response.data })都没有区别
azcvcza
2021-01-15 11:28:16 +08:00
那就再接一个 then,把 new Vue 那行放到里边去喽
darknoll
2021-01-15 12:24:50 +08:00
@YuxiangLuo 匆忙之间写错了,应该把 await 去掉,前面感叹号是防止 eslint 报错
duduaba
2021-01-15 13:55:14 +08:00
你这思路有问题,配置化的文件可以借助 babel,webpack 在构建的时候就注入,为什么要在代码执行的过程中注入呢。
wunonglin
2021-01-15 13:59:31 +08:00
???你是想做成配置中心那样还是环境变量那样?
no1xsyzy
2021-01-15 14:05:23 +08:00
构建时注入一个基本的,前端只请求确认差量。
如果仍然担心差量巨大,我觉得你们应该给前端发布新版本
no1xsyzy
2021-01-15 14:07:52 +08:00
另外,你可以通过 code splitting point 将这个 config.json 打包成单独的 dist/conf.js ,作为静态依赖
有更新可以直接改 conf.js 的内容,甚至由后端根据模板构造 conf.js 的内容。
darknoll
2021-01-15 15:02:55 +08:00
@coderfuns 你打包好了之后就一成不变了啊,如果我已经部署好的前端,我想改变后端接口地址了,我可以开始就把它写到 public 的 json 文件里面( public 里面的内容 webpack 是不会改的),然后要改的时候发个请求让后端修改这个配置文件。
darknoll
2021-01-15 15:04:13 +08:00
@no1xsyzy 这个怎么弄,还没研究过,有具体的教程吗?
duduaba
2021-01-15 15:22:52 +08:00
@darknoll 那这个就是配置中心的概念了。如果你用本地文件,直接加载静态文件就可以了啊,试试 systemjs 加载 json,类似 jsonp 方式放置到顶层 window 上。
tomcats
2021-01-15 15:24:03 +08:00
按照你的需求,你这个配置文件必须得先加载,那么直接丢 script 标签加载好了,弄成全局变量
linbingcheng
2021-01-15 15:41:22 +08:00
promise await async 异步变同步?
yaphets666
2021-01-15 15:48:50 +08:00
寸数据库不就行了?
再说了,前端是不可配置的.跟构建相关的东西都在打包阶段打进去了.不重新打包改不了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX