有没有更好的方法或在 vue.js 中导入 mixins

Posted

技术标签:

【中文标题】有没有更好的方法或在 vue.js 中导入 mixins【英文标题】:Is there any better way or importing mixins in vue.js 【发布时间】:2021-09-23 08:07:15 【问题描述】:

我在我的项目中创建了许多 mixin,现在我要做的是将所有 mixin 导入 mixins/index.js 文件以及任何需要的组件或页面中,我只需从 mixins/index.js 导入这些 mixin。

现在我怀疑我是否会导入所有不需要的 mixins 还是只导入我使用的 mixins 文件?

假设我在 mixins/index.js 中创建和导入了这些 mixim

import a from 'mixins/a.js'
import b from 'mixins/b.js'
import c from 'mixins/c.js'
import d from 'mixins/d.js'
import e from 'mixins/e.js'

export 
  a,
  b,
  c,
  d,
  e

现在让我在我的'x' components 中说我将导入'a' mixins

import  a  from 'mixins/index.js'

export default 
  mixins: [a]

在这种情况下,我的'x' components 中只需要'a' mixins,但由于我是从mixins/index.js 导入的,我拥有所有mixin 的所有静态导入,这是否也会加载不需要的mixins?

【问题讨论】:

答案是否取决于设置。它不应该加载未使用的 mixin,但它可以。 @EstusFlask 你能解释一下在什么情况下它也可以加载所有不需要的 mixin 吗?什么设置会导致这种情况发生?现在我正在研究nuxt js,所有配置都是默认设置,设置中没有什么特别的。 这取决于 Nuxt 内部使用的 Webpack 设置。我希望它没问题,但这不是可以保证的。影响这一点的东西称为摇树。如果出现问题,未使用的东西最终会在捆绑包中。 Tree Shaking 通常只发生在 prod 构建中,因此您可以期望 dev 构建很大,原因有很多,包括这个。 知道了 感谢您分享信息。 【参考方案1】:

import a from './mixins' 将只导入请求的模块,但如果你这样做:

import * as mixins from './mixins'

然后

mixins:[mixins.a]

这将按照here 的说明导入所有模块

【讨论】:

对不起,我认为我在代码中犯了一点错误,它应该是从'mixins/index.js'而不是'minxins/a.js'导入的 我解决了这个问题,而且你应该有一个类似 ./mixins../mixins 的路径 所以这意味着我可以使用我提到的方式对吗?在 mixins/index.js 中使用 import 并且只使用我在组件中需要的 mixins,在这种情况下它只会加载需要使用的 mixins 对吗? 非常感谢@Boussadjra Brahim import * as mixins 将只导入正在使用的对象,它与import a 的工作方式没有什么不同,至少在摇树工作正常且不直接使用mixins 对象的情况下.【参考方案2】:

您可以这样做,导入所有 minmins 文件,然后将您的 minmin 文件导出到索引中,如下所示:

index.js

import a from '../mixins/a.js'
import b from '../mixins/b.js'
import c from '../mixins/c.js'
import d from '../mixins/d.js'
import e from '../mixins/e.js'

export a, b, c, d, e

然后在你的组件中,你可以通过这种方式导入索引中导出的特定模块:

x 组件

import a, b from "../mixins"

这样你只导入你需要的,而不是所有的index.js模块

【讨论】:

以上是关于有没有更好的方法或在 vue.js 中导入 mixins的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 axios 在 Vue Js 中导入 json 数据

如何在 Vue.js 中导入 css?

在 vue js 中的基于 Web 的 html 脚本中导入 js 文件时出现 CORS 错误

如何在vue.js项目的main.js文件中导入js类并在所有组件中使用它而不是在每个组件中导入?

如何在 vue.js 中导入 ipcRenderer? __dirname 未定义

在自定义 Vue.js 组件中导入第三方组件(vue-color)