• 请不要在回答技术问题时复制粘贴 AI 生成的内容
darknoll
V2EX  ›  程序员

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

  •  
  •   darknoll · Jan 15, 2021 · 1719 views
    This topic created in 1973 days ago, the information mentioned may be changed or developed.

    使用的脚手架是 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,有没有啥好的方案处理这种情景?

    13 replies    2021-01-15 15:48:50 +08:00
    1KN6sAqR0a57no6s
        1
    1KN6sAqR0a57no6s  
       Jan 15, 2021
    你把 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
        2
    azcvcza  
       Jan 15, 2021
    那就再接一个 then,把 new Vue 那行放到里边去喽
    darknoll
        3
    darknoll  
    OP
       Jan 15, 2021
    @YuxiangLuo 匆忙之间写错了,应该把 await 去掉,前面感叹号是防止 eslint 报错
    duduaba
        4
    duduaba  
       Jan 15, 2021
    你这思路有问题,配置化的文件可以借助 babel,webpack 在构建的时候就注入,为什么要在代码执行的过程中注入呢。
    shakaraka
        5
    shakaraka  
    PRO
       Jan 15, 2021
    ???你是想做成配置中心那样还是环境变量那样?
    no1xsyzy
        6
    no1xsyzy  
       Jan 15, 2021
    构建时注入一个基本的,前端只请求确认差量。
    如果仍然担心差量巨大,我觉得你们应该给前端发布新版本
    no1xsyzy
        7
    no1xsyzy  
       Jan 15, 2021
    另外,你可以通过 code splitting point 将这个 config.json 打包成单独的 dist/conf.js ,作为静态依赖
    有更新可以直接改 conf.js 的内容,甚至由后端根据模板构造 conf.js 的内容。
    darknoll
        8
    darknoll  
    OP
       Jan 15, 2021
    @coderfuns 你打包好了之后就一成不变了啊,如果我已经部署好的前端,我想改变后端接口地址了,我可以开始就把它写到 public 的 json 文件里面( public 里面的内容 webpack 是不会改的),然后要改的时候发个请求让后端修改这个配置文件。
    darknoll
        9
    darknoll  
    OP
       Jan 15, 2021
    @no1xsyzy 这个怎么弄,还没研究过,有具体的教程吗?
    duduaba
        10
    duduaba  
       Jan 15, 2021
    @darknoll 那这个就是配置中心的概念了。如果你用本地文件,直接加载静态文件就可以了啊,试试 systemjs 加载 json,类似 jsonp 方式放置到顶层 window 上。
    tomcats
        11
    tomcats  
       Jan 15, 2021
    按照你的需求,你这个配置文件必须得先加载,那么直接丢 script 标签加载好了,弄成全局变量
    linbingcheng
        12
    linbingcheng  
       Jan 15, 2021
    promise await async 异步变同步?
    yaphets666
        13
    yaphets666  
       Jan 15, 2021
    寸数据库不就行了?
    再说了,前端是不可配置的.跟构建相关的东西都在打包阶段打进去了.不重新打包改不了.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1801 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 16:16 · PVG 00:16 · LAX 09:16 · JFK 12:16
    ♥ Do have faith in what you're doing.