在生产环境中,我的javascript资产被捆绑在一起,当我捕获到javascript错误时,我得到了它的行和列,例如:
d86c04c8f3.js:2:9588
现在,由于文件已缩小等,因此很难进行反向工程并在源代码中找到有问题的行。给定线路/列以找到原始线路,Rails资产捆绑器是否可以进行反向工程?因为资产建设者拥有所需的全部信息,所以应该有可能。
我们需要一个简单的选项来运行 捆绑包执行佣金资产:precompile RAILS_ENV =生产 再次,但是这次指定line + col,然后rake将输出与该资产line + col相对应的源文件+ line。这样,我们可以轻松调试在客户端捕获的异常(并发送给服务器以进行监视)。
EDIT1
关于在客户端执行某些操作的所有解决方案都是不可行的,因为我们无法访问客户端-我们所谈论的是在生产模式,实时模式下发现并发送到服务器进行监视。
答案 0 :(得分:1)
要调试缩小的脚本,有源映射,一旦加载到浏览器中,您就可以在其中看到未缩小的代码。
Sprockets计划在4.0中支持对源地图的支持,该支持尚未发布(仅beta版)。
Webpack确实支持默认情况下切换到webpacker的源地图和rails 6,因此将脚本转换为packs似乎是合乎逻辑的,尽管对于大型项目而言这是一项艰巨的任务
更新:有了构建的源映射后,就可以使用类似的工具:
npx source-map-cli resolve d86c04c8f3.js.map 2 9588
这将以以下形式告诉您缩小的文件映射中的位置在代码中的位置:
Maps to webpack:///app/javascript/components/CountrySelector.jsx:14:0
fetch(`/control/autocomplete/countries`).then(r => r.json()).then(countries => this.setState({countries}))
^