页面白屏,控制台第一条错误是 Mismatched anonymous define() module。这不是清缓存就能解决的问题,含义是RequireJS收到了一个无法对应当前请求文件的匿名AMD定义。启用JS合并、bundling或加载第三方库后最常见。
先在未压缩状态找到具体文件
bin/magento config:set dev/js/merge_files 0 bin/magento config:set dev/js/enable_js_bundling 0 bin/magento config:set dev/js/minify_files 0 bin/magento cache:clean rm -rf pub/static/frontend/<Vendor>/<theme>/<locale>/* var/view_preprocessed/* bin/magento setup:static-content:deploy -f <locale>
只在维护窗口或测试环境切换这些配置。刷新时勾选Disable cache,从Network按Initiator查看报错前最后加载的脚本。
典型错误写法
<script src="Vendor_Module::js/widget.js"></script>
// widget.js
define(['jquery'], function ($) { ... });
匿名AMD文件不应同时通过script标签和RequireJS路径加载。删除模板里的直接script引用,改用 x-magento-init、data-mage-init 或 require(['Vendor_Module/js/widget'])。
第三方库本身带UMD包装
有些库在检测到define.amd时会注册匿名模块。如果你还在shim里重复声明deps/exports,或把同一库复制到两个模块目录,就会冲突。用浏览器Network确认同一文件是否出现两次,再检查所有requirejs-config.js:
grep -R "widget.js|paths:|shim:|map:" app/code app/design -n
给库设置唯一paths别名,并让业务代码只引用这个别名。不要把库文件改成有名字的define作为首选方案,这会让升级和多个上下文更难维护。
恢复优化要逐项开
- 未合并状态验证首页、商品页、购物车和结账;
- 先开启minify,部署并测试;
- 再开启merge或bundling其中一个;
- 每次清理目标主题对应的静态目录并重新部署;
- 生产环境检查生成文件的Content-Type必须是application/javascript,而不是404 HTML。
如果只在CDN上复现,检查CDN是否把旧bundle与新requirejs-config.js混用。发布时对静态版本目录整体切换,比逐文件覆盖更可靠。

