使用 Laravel Mix 进行动态导入

发布日期:作者:

Using Dynamic Imports with Laravel Mix image

在最新的 Laravel Mix (4.0.16) 版本中,对 动态导入 的支持已默认提供。动态导入是一种代码拆分的策略,可以让我们轻松地将 JavaScript 组件、包和其他模块拆分成单独的文件。如果一个项目使用多个包或包含大量 Vue.js 或 React 组件,很容易导致 1MB 以上的 JavaScript 包。如果用户使用的是缓慢的网络连接,这可能会花费很长时间才能下载。

代码拆分允许我们提供更小的初始包(以 KB 为单位而不是 MB),并显著提高这些用户的加载时间。然后,Webpack 将在用户访问不同页面时自动下载所需的任何额外文件。

配置动态导入

要开始使用 Laravel Mix 进行动态导入,首先确保您使用的是 4.0.16 或更高版本。然后,如果还没有,请在项目的根目录中添加一个 .babelrc 文件。在文件中,将 @babel/plugin-syntax-dynamic-import 插件添加到“plugins”数组中。这将通过 Laravel Mix 中已包含的插件启用动态导入语法。

{
"plugins": [
"@babel/plugin-syntax-dynamic-import"
]
}

或者,如果您想在 webpack.mix.js 文件中配置插件,您也可以在那里添加。

mix.babelConfig({
plugins: ['@babel/plugin-syntax-dynamic-import'],
});

使用动态导入

要告诉 Webpack 您想要动态导入文件,您需要使用稍微不同的语法。下面我将演示标准导入和动态导入的区别。

// Standard import
import StandardComponent from './components/ExampleComponent.vue';
 
// Dynamic import
const DynamicallyImportedComponent =
() => import('./components/ExampleComponent.vue');

默认情况下,Webpack 会将动态导入的文件拆分成块,并分别命名为 0.js1.js 等。Laravel Mix 被配置为使用块名称、内容的哈希值,以及 .js 扩展名来命名文件。如果您想为文件配置块名称,您需要在导入语句中添加一个“魔法”注释来告诉 Webpack 您要使用的名称。下面,我告诉 Webpack 我想使用 dynamically-imported-component 作为名称,这将生成一个 dynamically-imported-component.[hash].js 文件。

const DynamicallyImportedComponent =
() => import(/* webpackChunkName: "dynamically-imported-component" */ './components/ExampleComponent.vue');

将动态导入与 Vue Router 一起使用

如果您在项目中使用 Vue Router,可以使用动态导入将每个页面拆分成单独的文件,操作非常简单。在配置路由时,可以使用动态导入语法,而不是 require() 或标准导入语法,Webpack 会处理其他一切。

const routes = [
{
name: 'dashboard',
path: '/dashboard',
component:
() => import(/* webpackChunkName: "dashboard" */ './pages/Dashboard.vue'),
},
];

结论

总的来说,动态导入是一个非常实用的工具。它们易于使用,可以为您的用户带来一些实际益处,特别是在大型应用程序中。我建议您在正在进行的项目中或下一个项目中尝试使用它们!

Jason Beggs photo

TALL 技术栈(Tailwind CSS、Alpine.js、Laravel 和 Livewire)顾问,designtotailwind.com 网站所有者。

分类
Cube

Laravel 新闻通讯

加入 40,000 多名其他开发者,不错过任何新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全功能和本地及生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

No Compromises

Joel 和 Aaron,两位来自 No Compromises 播客的经验丰富的开发者,现已开放接单,为您的 Laravel 项目提供服务。 ⬧ 固定价格 7500 美元/月。 ⬧ 无需冗长的销售流程。 ⬧ 无需签订合同。 ⬧ 100% 退款保证。

No Compromises
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

还在运行旧版本的 Laravel?立即进行自动化的 Laravel 升级和代码现代化,使您的应用程序保持新鲜感。

Shift
Bacancy logo

Bacancy

只需每月 2500 美元,即可为您的项目配备经验丰富的 Laravel 开发人员(拥有 4-6 年经验)。获取 160 小时的专业服务和 15 天的无风险试用。立即预约通话!

Bacancy
Lucky Media logo

Lucky Media

立即获得好运 - 是 Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务解决方案。一个开源包,为 Laravel 带来了现代无头电子商务功能的力量。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,包含运行现代 SaaS 所需的所有功能。支付、精美结账页面、管理面板、用户仪表板、身份验证、即用型组件、统计、博客、文档等等。

SaaSykit:Laravel SaaS 启动套件
Rector logo

Rector

您无缝升级 Laravel、降低成本、加速创新以成就成功的合作伙伴

Rector
MongoDB logo

MongoDB

通过强大的 MongoDB 和 Laravel 集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。探索灵活的现代数据库 MongoDB 如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

在您的 Laravel 应用程序中添加 Swagger UI

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的站点搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在您的 Laravel 应用程序中添加评论

阅读文章