如何在Laravel Vue.js 3项目中正确加载JavaScript文件?
Laravel + Vue.js 项目中引入JavaScript文件的最佳实践
你当前用动态创建script标签的方案偶尔失效,核心问题在于依赖顺序不可控、加载时机与DOM生命周期不匹配,以下是几种更可靠的方案:
方案一:使用Vite静态导入(官方推荐)
Laravel默认用Vite作为构建工具,直接在项目入口JS文件(比如resources/js/app.js)中导入脚本,Vite会自动处理依赖顺序、打包优化,完全避免加载失效问题:
- 第三方库优先用npm安装:
npm install jquery select2 moment slick-carousel
然后在app.js中导入并挂载全局(如果需要全局调用):
import $ from 'jquery'; import 'select2'; import moment from 'moment'; import 'slick-carousel'; window.$ = window.jQuery = $; window.moment = moment;
- 本地自定义脚本直接导入路径:
import '../assets/frontend/slick-custom.js'; import '../assets/frontend/main.js';
最后通过npm run dev或npm run build编译,Blade模板中用@vite('resources/js/app.js')引入编译后的资源即可。
方案二:在Blade模板中直接顺序引入
如果不需要打包(比如静态第三方资源),可以直接在Blade模板里按依赖顺序用asset()函数引入,确保依赖脚本先加载:
<!-- 建议放在页面底部,避免阻塞DOM渲染 --> <div id="app"></div> <script src="{{ asset('assets/frontend/vendor/jquery/jquery-3.2.1.min.js') }}"></script> <script src="{{ asset('assets/frontend/vendor/bootstrap/js/popper.js') }}"></script> <script src="{{ asset('assets/frontend/vendor/bootstrap/js/bootstrap.min.js') }}"></script> <script src="{{ asset('assets/frontend/vendor/select2/select2.min.js') }}"></script> <!-- 按依赖顺序引入剩余脚本 --> <script src="{{ asset('assets/frontend/main.js') }}"></script> @vite('resources/js/app.js')
方案三:按需动态导入(适合组件级加载)
如果某些脚本只在特定Vue组件中使用,用Vite的动态导入实现按需加载,同时严格保证依赖顺序:
// 在Vue组件的methods或setup函数中 async loadRequiredScripts() { // 先加载核心依赖 await import('/assets/frontend/vendor/jquery/jquery-3.2.1.min.js'); // 再加载依赖核心的插件 await import('/assets/frontend/vendor/select2/select2.min.js'); // 最后加载自定义业务脚本 await import('/assets/frontend/slick-custom.js'); // 脚本加载完成后执行初始化逻辑 $('.select2').select2(); }
原方案失效的原因
你设置async=false试图保证顺序,但脚本插入时机可能早于目标DOM元素(#scripts)挂载完成,或者网络波动导致某条脚本加载失败,后续脚本会因依赖缺失无法执行。此外,手动拼接URL容易出错,asset()或Vite的路径处理更可靠。
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

