【问题标题】:Vue.js lazy load custom library componentVue.js 延迟加载自定义库组件
【发布时间】:2021-03-10 04:00:34
【问题描述】:

我创建了一个包含 2 个组件的小型库并在 UMD 中编译它。 我像这样导出组件:

import Btn from './components/Btn'
import Other from './components/Other'

export { Btn, Other }

我尝试使用惰性导入或导出作为默认值......不是更好。 在我的应用程序中,我将库导入为 npm 依赖项。 之后,在 app.vue 中,我想通过延迟加载加载一个组件(如 Btn)

export default {
  name: 'App',
  components: {
    Btn: () => import('myLib').then(m => m.Btn)
  }
}

这是可行的,但对我不利,因为所有库都已加载并且在我使用 Btn 之后。 有没有办法用真正的延迟加载直接加载组件?

另一种方法是第一次使用完全延迟加载库...

【问题讨论】:

    标签: vue.js lazy-loading umd


    【解决方案1】:

    试试这个(未经测试)。不要立即在库中导入模块,而是导出函数。从库中删除所有 import 语句:

    .js

    export default {
      Btn: () => import('./components/Btn'),
      Other: () => import('./components/Other')
    }
    

    像这样使用它:

    import myLib from './myLib'
    export default {
      name: 'App',
      components: {
        Btn: myLib.Btn
      }
    }
    

    你也可以在没有库的情况下做到这一点:

    export default {
      name: 'App',
      components: {
        Btn: () => import('./components/Btn')
      }
    }
    

    【讨论】:

    • 好主意,但不起作用 [Vue 警告]:无法解析异步组件:function Btn() { return Promise.resolve(/*! import() /).then( webpack_require.t.bind(null, /!fragment */ "../lib/dist/fragment.umd.min.js", 7)).then(function (m ) { console.log(m); m.Btn(); });原因:TypeError: m.Btn is not a function
    • 这就是为什么一个人不应该未经测试就发布答案...我更新了一个经过测试的答案。
    • 差不多了 :D 你试试 vue-cli 吗?默认情况下,webpack 将库拆分为 3 个块:库 + Btn + 其他。所以现在我有这个错误:[Vue warn]: Failed to resolve async component: function Btn() { return n.e(1).then(n.bind(null, "dedc"));原因:ChunkLoadError:加载块 1 失败。 (缺失:localhost:8080/js/myLib.umd.min.1.js)我将所有代码推送到 github 下:github.com/BriceChaponneau/vue-lib
    • 是的,我在 Vue CLI 中测试过
    • 嗯好的。那么我的代码有什么问题吗?再简单不过了。
    猜你喜欢
    • 2020-07-04
    • 2018-04-28
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多