我认为这是由 PR DEV: Bump uglifyjs by romanrizzi · Pull Request #7834 · discourse/discourse · GitHub 引起的源映射生成方式问题。
此前,使用了 -p 相对选项,因此源映射路径类似于 [‘admin…js.map’]。从 2.4.beta9 开始,由于迁移到 uglify 3,-p 选项不再可用,导致源映射路径变为绝对路径,例如 [‘/var/www/discourse/public/assets/admin…js.map’]。这导致在调试时源映射返回 404 错误,因为实际文件位于 /assets,但映射文件却指示其位于 /var/www/…/assets。
我找到的一个解决方法是修改 lib/tasks/asset.rake,为源映射参数添加 base 选项,使其如下所示:
base = assets_path + ((d = File.dirname(from)) == "." ? "" : "/#{d}")
cmd = <<~EOS
uglifyjs '#{assets_path}/#{from}' -m -c -o '#{to_path}' --source-map "base='#{base}',root='#{source_map_root}',url='#{source_map_url}'" --output '#{to_path}'
EOS
我无法保证此方法对所有人都有效,但它让我能够通过源映射进行调试,而不会出现 404 错误。