发布后首页看起来没事,结账页却白屏并报 require is not defined,通常不是 checkout 业务代码坏了,而是 RequireJS 主文件没加载成功或加载顺序被合并工具改乱。

先检查requirejs/require.js的请求状态

Network 过滤 require.js,看它是 404、403、HTML 响应还是被 CDN 返回了旧内容。如果响应 Content-Type 是 text/html,经常是静态资源没部署,Nginx 又把 404 fallback 到首页。

确认文件:

pub/static/frontend/Vendor/theme/zh_Hans/requirejs/require.js

并检查页面 source 中 require.js 是否出现在依赖它的 bundle 之前。

暂时关闭合并功能定位,不要直接长期绕过

如果启用了第三方 JS 合并、defer 或 CDN 优化,先在测试环境关闭它,重新部署:

php bin/magento config:set dev/js/merge_files 0
php bin/magento config:set dev/js/enable_js_bundling 0
php bin/magento setup:static-content:deploy -f   --theme Vendor/theme zh_Hans
php bin/magento cache:flush

恢复后再逐项打开优化配置,找出哪个步骤改变了脚本顺序。Cloudflare Rocket Loader 一类功能也要对 Magento 的 RequireJS 页面排除。

最后用无痕窗口打开首页、商品页和 checkout,确认 require 在第一个自定义模块执行前已经存在,并检查所有静态 JS 都返回 200,而不是只看到结账界面出现就结束。