点击时在错误路径调用_ember_jquery

我一直在调试 BS4 下拉菜单无法正常工作的问题,发现点击时,_ember_jquery.js 被调用的路径是 /assets/var/www/discourse/public/assets,而不是其实际所在的 /assets 路径。我不清楚为什么会附加完整的服务器路径。据我所知,没有进行任何相关的配置更改,我唯一的工作是添加一个简单的自定义插件(是的,即使移除了该插件,问题仍然存在)。我对 Discourse 还比较陌生,因此非常感谢您的任何建议。如果需要更多信息,请随时告知。

我认为这是由 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 错误。

我们需要修复这个问题吗,@sam

是的,我们已在其他地方跟踪此问题,将在 TODO 中添加备注,以便 @Roman 知晓。

抱歉让您久等了,问题现已修复,并已向后移植到 beta 和 stable 版本。我添加了 base 属性,其中包含资源的路径,而 source 属性仅保留文件名。

https://review.discourse.org/t/fix-ensure-sourcemaps-source-is-correct-uses-the-full-assets-path-this-time-8774/8506