我有 window.onerror
并捕获一些异常。但问题是堆栈跟踪是在从另一种语言(ClojureScript)编译的 JS 中。所以带有行号的堆栈跟踪是编译形式。问题是:如何在浏览器中将堆栈转换为原始源?正如我们所见,浏览器已经能够在调试器中使用映射源。 (我们只使用 Chrome)
最佳答案
ClojureScript 确实支持源映射。默认情况下,ClojureScript 编译器将发出仅用于开发构建的源映射文件。根据您的描述,您的 ClojureScript 文件已经编译用于生产。
有两种方法可以解决您的问题:
为生产构建生成源映射
既然您要的是源映射,这里是获取它们的方法。
如果您有权访问源代码,您也可以设置适当的编译器选项来为生产构建启用源映射:
shadow-cljs
,您可以在 Compiler Options 中找到示例文档。 cljsbuild
,您可以在 Source Maps 中找到示例文档。 这是在生产模式下启用源映射的最小配置:
shadow-cljs
{:builds {:app {:target :browser
:release {:compiler-options {:source-map true}}}}}
cljsbuild
{:cljsbuild {:builds [{:id "production"
:compiler {:optimizations :advanced
:source-map true}}]}}
为生产版本启用 Debug模式(推荐)
ClojureScript 编译器还有一个名为
:pseudo-names
的特性。旨在解决这个特定问题。来自 ClojureScript documentation :
Change your production build to use two additional (compiler) options
:pseudo-names true
and:pretty-print true
. Now your error will show a name that corresponds to the name in the original source.
和上面一样,下面是一个例子:
cljsbuild
{:cljsbuild {:builds [{:id "production-debug"
:compiler {:optimizations :advanced
:pseudo-names true
:pretty-print true}}]}}
shadow-cljs
,可以直接运行:shadow-cljs release app --debug
如果您无法访问源代码,直接向维护者寻求帮助会更明智。 ClojureScript 生产构建模式生成紧凑的代码,旨在尽可能小和尽可能快,而不是由人类阅读或调试。
关于javascript - 在浏览器中获取源映射的源位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60543802/