0

0

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

碧海醫心

碧海醫心

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

|

558人浏览过

|

来源于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。

DeepL
DeepL

DeepL是一款强大的在线AI翻译工具,可以翻译31种不同语言的文本,并可以处理PDF、Word、PowerPoint等文档文件

下载

⚠️ 注意事项与最佳实践

  • 避免重复引入相同文件:你当前 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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

332

2024.04.09

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

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

285

2024.04.09

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

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

560

2024.04.09

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

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

379

2024.04.10

laravel入门教程
laravel入门教程

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

130

2025.08.05

laravel实战教程
laravel实战教程

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

78

2025.08.05

laravel面试题
laravel面试题

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

69

2025.08.05

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

521

2023.06.20

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

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

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