仅在添加到刀片页面时导入 Vue 组件

Posted

技术标签:

【中文标题】仅在添加到刀片页面时导入 Vue 组件【英文标题】:Import Vue Component only when added to blade pages 【发布时间】:2018-02-28 04:15:07 【问题描述】:

我开始使用 Laravel、Vuejs 和 Blade 为模板引擎开发应用程序。 首先,我是 Vuejs 世界的新手,也许是一项简单的任务,但我在任何讨论中都没有找到答案。 核心思想是使用 .blade 页面,当我需要 vuejs 组件时,将它们添加到页面中,通过 props 数组传递服务器的数据。一切工作正常,但玩了一会儿之后,我注意到一个可能存在的问题。 在 laravel 的文档中,我们注册组件,或者 app.js 中的任何 Vue 设置:然后,使用 laravel mix,我们将所有代码(例如导入、需要、不同的 js 页面......)绑定在一个文件中,最后我们使用脚本标签在我们的页面中加载“app.[hash].js”。我注意到即使只使用了几个 vue 组件,app.js 也增长得非常快(当然,我们将每个组件都导入一个文件中),甚至动态地导入组件而不是全局设置它们。 我的问题是:将所有 js 代码绑定在一个文件中是正常的(有一个大文件),或者有没有办法只在 .blade 文件中添加 vue 组件时才导入它们,也许使用某种 webpack(laravel混合)设置?

提前感谢您的支持。

发布问题后找到解决方案:

Marcin 和 GoogleMac 的答案可能都是正确的,但我发现了一个有趣的话题,我想分享给任何可能遇到我的问题的人。我建议查看此链接https://alexjoverm.github.io/2017/07/16/Lazy-load-in-Vue-using-Webpack-s-code-splitting/,他们在其中讨论代码拆分。 我认为这可能是最好的方法,主要是因为即使在 vue 的文档中也谈到了(这里有详细信息https://vuejs.org/v2/guide/components.html#Async-Components)。 我的缺点是没有检查详细的文档。

【问题讨论】:

【参考方案1】:

您可以添加多个app.js(如果需要,还可以添加多个router, vuex)。 在webpack.mix.js 上分别输入它们。 然后根据需要在刀片文件中包含合适的app.js 文件。 如果您不想与任何永远不会使用这些组件的用户共享一些 .js 代码,我认为这会容易得多。

注意:当然延迟加载是一种解决方案,但这对我来说更方便,因为我不会向不需要它的用户提供任何组件。

【讨论】:

【参考方案2】:

我同意 Marcin 的回答,但如果您想要解决方法,请在 app.js 中注释掉 Laravel 内置的 Vue 注册,并在您的刀片文件中使用 cdn。

【讨论】:

【参考方案3】:

最好将 js 代码捆绑在一个文件中,因为它只会被浏览器下载一次并被缓存。

javascript 代码没有那么 大,所以不要为它烦恼。

【讨论】:

以上是关于仅在添加到刀片页面时导入 Vue 组件的主要内容,如果未能解决你的问题,请参考以下文章

vue.js 组件使用 laravel 刀片作为模板

运行时导入 Vue 组件的 webpack 块时如何添加授权标头

在 Vue.js 中,如何滚动到导入的组件?

vue3+ts导入子组件报错

如何将 scss 导入到我的 Vue 组件中?

LARAVEL + Vue.js:使用刀片在 MPA 中显示整个页面的 vue.js 组件,对 SEO 不友好