代码已经更新,setup:static-content:deploy 也执行成功,但浏览器 Sources 里仍是旧 JavaScript。此时继续清浏览器缓存往往没有意义:需要先回答一个问题——旧内容究竟来自 HTML、CDN,还是服务器上的静态产物。

先比较 HTML 引用和真实文件

curl -sk https://shop.example.com/ -o /tmp/home.html
grep -oE '/static/version[0-9]+/[^"]+' /tmp/home.html | head
curl -skI 'https://shop.example.com/static/version123/frontend/Vendor/theme/zh_CN/js/app.js'
sha256sum app/code/Vendor/Module/view/frontend/web/js/app.js
sha256sum pub/static/frontend/Vendor/theme/zh_CN/Vendor_Module/js/app.js

HTML 仍引用旧 version 路径,问题在页面缓存或部署切换;HTML 已引用新路径但响应内容旧,继续查 CDN 与源站文件。不要只看 URL 上有新的版本号,版本目录通常经过重写,真正的缓存键还取决于完整 URL 和 CDN 规则。

绕过 CDN 请求源站

curl -sk --resolve shop.example.com:443:10.0.0.12   'https://shop.example.com/static/version123/frontend/Vendor/theme/zh_CN/js/app.js'   -o /tmp/origin-app.js
curl -sk 'https://shop.example.com/static/version123/frontend/Vendor/theme/zh_CN/js/app.js'   -o /tmp/cdn-app.js
sha256sum /tmp/origin-app.js /tmp/cdn-app.js

两个哈希不同,先按具体静态路径刷新 CDN,而不是清空整个站点缓存。哈希相同则 CDN 无罪,回到服务器产物。

重新生成前先删对目录

bin/magento maintenance:enable
rm -rf pub/static/frontend/Vendor/theme/zh_CN
rm -rf var/view_preprocessed/pub/static/frontend/Vendor/theme
bin/magento setup:static-content:deploy -f zh_CN en_US
bin/magento cache:clean full_page block_html
bin/magento maintenance:disable

保留 pub/static/.htaccess,不要直接删除整个 pub/static。多节点环境还要确认每台 Web 节点使用同一发布产物;如果负载均衡轮到旧节点,就会出现刷新一次新、一次旧。

RequireJS 合并开启时再查一层

bin/magento config:show dev/js/merge_files
bin/magento config:show dev/js/enable_js_bundling
find pub/static -path '*_cache/merged*' -type f -maxdepth 8 | head

生产环境启用合并或 bundling 后,修改源模块并不代表页面直接请求该文件。用 Network 面板确认实际命中的 bundle,再比较源站内容。修复完成的标准不是“命令没报错”,而是 HTML 引用、新旧节点文件哈希和外部请求响应三者一致。