0

0

Laravel模块化开发中Vite资源加载指南:解决Blade文件404错误

花韻仙語

花韻仙語

发布时间:2025-10-30 20:33:00

|

729人浏览过

|

来源于php中文网

原创

Laravel模块化开发中Vite资源加载指南:解决Blade文件404错误

本教程旨在解决在laravel模块化开发中,使用vite加载javascriptcss资源时遇到的404错误。文章将深入探讨传统方法失败的原因,并详细介绍如何通过laravel提供的@vite blade指令,正确且高效地在blade模板中引入模块化vite资产,确保开发和生产环境下的资源路径解析无误。

理解Laravel模块化与Vite资源加载的挑战

在Laravel应用程序中,尤其是在采用nwidart/laravel-Module等模块化方案时,管理和加载模块内部的JavaScript和CSS资源是一个常见需求。开发者通常会选择使用Vite作为前端资产构建工具。然而,在Blade模板中直接通过传统的标签或{{ asset('/js/app.js') }}辅助函数引入Vite处理过的模块资源时,常常会遇到“404 (Not Found)”错误。

出现此问题的主要原因在于:

  1. Vite的开发服务器与生产构建机制: Vite在开发模式下会启动一个独立的开发服务器,资源由该服务器提供。在生产模式下,Vite会编译资源并生成带哈希值的唯一文件名(例如app-xxxxxx.js),并通过manifest.json文件映射原始路径到最终的输出路径。传统的src路径或asset()辅助函数无法感知Vite的这些动态路径变化。
  2. asset()辅助函数的局限性: asset()辅助函数通常用于指向public目录下的静态资源。但Vite处理后的资源,尤其是在开发模式下,并非直接存储在public目录中,而是由Vite开发服务器动态提供。在生产模式下,即使资源位于public/build等目录,其带哈希值的名称也需要通过manifest.json来解析。
  3. 模块资源路径: 模块内部的资源(例如Modules/Auth/Resources/assets/js/app.js)是Vite的输入路径,而不是可以直接通过HTTP访问的URL路径。vite.config.js文件定义了Vite需要处理的这些入口点,但并不意味着这些路径可以直接在浏览器中访问。

解决方案:使用@vite Blade指令

Laravel提供了一个专门用于加载Vite资源的Blade指令:@vite。这个指令是解决上述问题的核心,它能够智能地判断当前环境(开发或生产),并自动从Vite开发服务器获取资源URL,或根据manifest.json文件解析生产环境下的资源路径。

正确引入JavaScript资源

假设您的vite.config.js文件已正确配置了模块的JavaScript入口点:

// vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'Modules/Auth/Resources/css/app.css',
                'Modules/Auth/Resources/assets/js/app.js' // 模块的JS入口点
            ],
            refresh: true,
        }),
    ],
});

要在Blade文件中正确引入Modules/Auth/Resources/assets/js/app.js,您应该使用以下@vite指令:

一键职达
一键职达

AI全自动批量代投简历软件,自动浏览招聘网站从海量职位中用AI匹配职位并完成投递的全自动操作,真正实现'一键职达'的便捷体验。

下载


    

    
    @vite('Modules/Auth/Resources/assets/js/app.js')

代码解析:

  • @vite('Modules/Auth/Resources/assets/js/app.js'):指令接收Vite配置中定义的入口点路径作为参数。
  • 开发环境 (npm run dev):此指令会生成类似于的代码,直接从Vite开发服务器加载资源。
  • 生产环境 (npm run build):此指令会读取public/build/manifest.json文件,找到Modules/Auth/Resources/assets/js/app.js对应的带哈希值的实际文件名(例如public/build/assets/app-xxxxxx.js),并生成正确的

同时引入JavaScript和CSS资源

如果您还需要同时引入模块的CSS文件(例如Modules/Auth/Resources/css/app.css),@vite指令也支持传入一个数组:



    

    
    @vite(['Modules/Auth/Resources/css/app.css', 'Modules/Auth/Resources/assets/js/app.js'])


    

注意事项与最佳实践

  1. vite.config.js配置: 确保您的vite.config.js文件中的input数组包含了所有需要Vite处理的入口点(包括模块内部的JS和CSS文件)。
  2. 运行Vite命令:
    • 开发模式: 在开发过程中,请务必运行npm run dev命令,以启动Vite开发服务器。这使得@vite指令能够从开发服务器获取资源。
    • 生产模式: 在部署到生产环境之前,必须运行npm run build命令。这将编译您的前端资源,生成优化后的文件和manifest.json,供@vite指令在生产环境中正确解析路径。
  3. manifest.json: 生产构建时生成的public/build/manifest.json文件至关重要。它包含了Vite如何将原始入口点映射到最终输出文件的信息,@vite指令依赖此文件来正确加载资源。
  4. 模块路径的准确性: 确保@vite指令中使用的路径与vite.config.js中input数组里的路径完全一致,它们是相对于项目根目录的路径。
  5. 参考官方文档: 对于更复杂的Vite配置或特定场景,建议查阅Laravel官方的Vite文档,获取最权威和详细的指导。

总结

在Laravel模块化开发中,正确加载Vite处理的前端资源是确保应用功能正常运行的关键。通过摒弃传统的script标签和asset()辅助函数,转而采用Laravel提供的@vite Blade指令,开发者可以无缝地集成Vite,无论是在开发环境还是生产环境中,都能确保模块内的JavaScript和CSS资源被高效且准确地加载,从而避免恼人的404错误,提升开发体验和部署效率。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

557

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

416

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

756

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

479

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

514

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1091

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号