注册 Nuxt 插件:全局与手动导入

Posted

技术标签:

【中文标题】注册 Nuxt 插件:全局与手动导入【英文标题】:Registering Nuxt Plugins: Globally vs Manual Import 【发布时间】:2022-01-08 02:12:08 【问题描述】:

我创建了两个存储库作为我放置 API 调用的插件。

plugins/repos/UserRepository.js(我需要在 /views/users.vue 中)

plugins/repos/PostRepository.js(我需要在 /views/posts.vue 中)

要使用这些插件,我有两个选择:

    通过在 nuxt.config.js 的 plugins 数组中列出这些插件来全局注册这些插件

    在各自的 vue 组件中手动导入每个 repo。

在第一个选项的情况下,我的回购看起来像这样:

export default (ctx, inject) => 

const data=
        getAll()
            return context.$axios
            .$get("/users");
        
    

    inject('userRepo', data);

第一种方法的主要优点是我可以访问上下文。但是如果我在我的组件中手动导入它(第二种方法),那么我需要在插件中手动传递上下文。

但第一种方法的主要缺点是它使插件普遍可用。 所以我的主要问题是:第一个在内存消耗方面是一种不好的方法,因为我不需要 users.vue 中的 PostRepository 但它仍然由 Nuxt 自动导入,因为我在 plugins 数组中提到了它nuxt.config.js?

请告诉我处理此问题的最佳方法是什么,因为我有数十个存储库,因此在全球范围内注册所有这些存储库是个好主意?

【问题讨论】:

【参考方案1】:

您几乎回答了自己的问题。在内存方面以及 SPA 的加载时间方面,即使您只使用 5% 的时间,最好进行本地导入而不是全局导入。

然后,您始终可以像往常一样自行访问上下文,而无需插件 aka this.$axios。这里的阻塞用例是什么?

如果您正在使用 Nuxt3,您还可以使用可组合。

【讨论】:

没有阻塞,我唯一担心的是如果我手动导入它,我无法访问存储库中的上下文(this.$axios)。在这种情况下,我需要从我使用 repo 的位置显式传递上下文。 @habib 取决于你实际导入它的位置,如果它在.vue 文件中,如果你使用axios nuxt module,你应该是gucci。如果它在常规的.js 文件中,我想你可以使用常规的 axios。 我正在将它导入到 vue 文件中。顺便说一句,这里的 gucci 是什么意思? @habib 我不确定为什么您无法在组件中访问this.$axios,但如果您查看usage page,您完全可以在那里使用它。您是否正确安装了模块?如果你这样做了,你将可以访问它。 @habib 如果它不在.vue 文件中,也不在vuex 文件中,只是一个常规的API 模型JS 文件,那么您应该在您的JS 文件中使用regular axios。实际上,this.$axios 将与 Vue/Nuxt 上下文一起使用。如果你摆脱它,使用 nuxt 模块没有意义。

以上是关于注册 Nuxt 插件:全局与手动导入的主要内容,如果未能解决你的问题,请参考以下文章

vue js 可以全局注册所有组件吗?

Nuxt.js - 全局导入自定义 NPM 包

Vue全局组件与局部组件

注册全局组件和局部组件

Jenkins 用户权限管理

Nuxt 添加全局插件内存泄漏问题