讲师中心 微信公众号
AI工具推荐 视频效率加速

Laravel 10 + Vite 构建时 JS 文件内容被意外清空的解决方案

秋墨同学_7270

秋墨同学_7270

发布时间:2026-02-15 11:19:07

|

618人浏览过

|

来源于php中文网

原创

Laravel 10 + Vite 构建时 JS 文件内容被意外清空的解决方案

vite 在构建 laravel 10 项目时,会因 tree shaking 机制误删未显式导出或调用的全局函数,导致如 global.js 等入口文件编译后仅剩部分代码,本文详解成因与专业级修复方案。

vite 在构建 laravel 10 项目时,会因 tree shaking 机制误删未显式导出或调用的全局函数,导致如 global.js 等入口文件编译后仅剩部分代码,本文详解成因与专业级修复方案。

在 Laravel 10 中集成 Vite 后,执行 npm run build 时出现 JS 文件内容“被清空”的现象(例如 global.js 编译后只剩 Swal.mixin({...}) 一行),本质并非 Vite 故意破坏代码,而是其默认启用的 Tree Shaking(摇树优化) 机制将未被显式引用的函数判定为“无用代码”并移除。

Vite(底层基于 Rollup)在生产构建中会深度分析模块依赖图。而你的 global.js 文件中定义了大量工具函数(如 BoxInfo、CreateToast、SelectAll 等),但未通过 export 导出,也未在任何其他模块中 import 调用——Vite 无法识别这些函数将在运行时被全局作用域(如 Blade 模板中的内联 <script> 或事件绑定)动态调用,因此将其视为“死代码”(dead code)予以剔除。</script>

✅ 正确解决方案:显式声明全局可访问性

最稳定、符合 Vite 设计哲学的方式是:将需全局可用的函数挂载到 window 对象上,并向 Vite 明确声明这些符号不应被摇树移除。

✅ 推荐修复步骤(以 resources/js/global.js 为例)

  1. 在文件末尾显式挂载关键函数到 window:
// ...(原有全部函数定义保持不变)

// ? 关键:显式暴露至全局作用域,阻止 Tree Shaking
window.Box = Box;
window.BoxInfo = BoxInfo;
window.BoxConfirm = BoxConfirm;
window.CreateToast = CreateToast;
window.SelectAll = SelectAll;
window.SelectAlternate = SelectAlternate;
window.DeleteSelected = DeleteSelected;
window.DeleteSingle = DeleteSingle;
window.DeleteSingleFromShow = DeleteSingleFromShow;
window.ResetForm = ResetForm;
  1. 确保该文件被正确纳入 Vite 入口(已在 vite.config.js 中配置,无需改动):
    你当前的 input 数组已包含 'resources/js/global.js',这是正确的。

  2. (可选但推荐)禁用针对该文件的摇树提示(增强健壮性):
    在 vite.config.js 的 build.rollupOptions 中添加 treeshake: false 仅对特定文件生效较复杂;更通用的做法是——在 global.js 顶部添加注释指令,告知打包器保留所有内容:

// resources/js/global.js
// @ts-nocheck
// vite-ignore
// --- DO NOT TREE-SHAKE THIS FILE ---
// All functions below are used globally via Blade templates or inline scripts.

// ...(后续原有代码)

? 提示:// vite-ignore 并非 Vite 官方指令,但结合 /*#__PURE__*/ 注释或 /*#__NO_SIDE_EFFECTS__*/ 可影响某些场景。实际中最可靠方式仍是显式挂载 window.xxx。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载

⚠️ 注意事项与最佳实践

  • 避免重复引入相同文件:你当前 vite.config.js 中 'resources/js/global.js' 被列出了两次(第 8 和第 9 行),请删除重复项,否则可能引发不可预期行为:

    - 'resources/js/global.js',
    - 'resources/js/global.js', // ← 删除这一行
  • 不要关闭全局 Tree Shaking:在 vite.config.js 中设置 build.treeshake: false 会显著增大最终包体积,且违背现代构建理念,不推荐。

  • 验证是否生效:构建后检查 public/build/assets/global-*.js,应完整保留所有函数定义及 window. 挂载语句。

  • 进阶建议(长期维护):
    将全局工具函数重构为 ES 模块,按需导入:

    // resources/js/utils/toast.js
    export function CreateToast({ message, background = 'text-bg-primary' }) { /* ... */ }
    
    // resources/js/app.js
    import { CreateToast } from './utils/toast';
    window.CreateToast = CreateToast; // 仍挂载供旧模板使用

    这样既保留向后兼容性,又为未来模块化演进打下基础。

✅ 总结

问题根源 Vite 生产构建默认启用 Tree Shaking,将未被静态分析识别为“被使用”的全局函数清除
核心解法 所有需全局调用的函数,必须显式赋值给 window 对象(如 window.CreateToast = CreateToast)
关键动作 删除 vite.config.js 中重复的 global.js 条目;确保挂载语句位于文件末尾;构建后验证输出完整性

遵循此方案,npm run build 将生成完整、可用的 JS 文件,彻底解决 Laravel 10 + Vite 下“函数消失”问题。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

877

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

875

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2528

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4841

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

7090

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

4656

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

8709

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1516

2026.03.04

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 223人学习

Composer手册
Composer手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn