页面白屏,控制台第一条错误是 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作为首选方案,这会让升级和多个上下文更难维护。

恢复优化要逐项开

  1. 未合并状态验证首页、商品页、购物车和结账;
  2. 先开启minify,部署并测试;
  3. 再开启merge或bundling其中一个;
  4. 每次清理目标主题对应的静态目录并重新部署;
  5. 生产环境检查生成文件的Content-Type必须是application/javascript,而不是404 HTML。

如果只在CDN上复现,检查CDN是否把旧bundle与新requirejs-config.js混用。发布时对静态版本目录整体切换,比逐文件覆盖更可靠。