关于我们的应用程序的一些背景知识,我们一直在 docker 容器内运行我们的 Angular 前端,并有一个 shell 脚本负责设置环境变量并使用所需的配置构建前端容器。在构建前端时,我们还使用 RollBar 文档中描述的命令将缩小的文件上传到 Rollbar 服务器。因此,当我们在生产环境中运行我们的应用程序时,我们有以下命令将它们上传到 Rollbar 服务器。(注意 minified_url 包含我们应用程序的 HTTP 路径。
curl https://api.rollbar.com/api/1/sourcemap \
-F access_token={$RollBar_Access_Token}\
-F version=$GIT_CURRENT_REVISION\
-F minified_url=https://example.com/$MINIFIED_JS \
-F source_map=@dist/webapp/${MINIFIED_JS}.map;
但是现在为了复制本地开发环境中的行为,我们将 minified_url 更改为容器内的路径,如下所示,它指向容器内的缩小 JS 文件(注意 $MINIFIED_JS 是保存我们的名称的变量缩小的 Js 文件)
curl https://api.rollbar.com/api/1/sourcemap \
-F access_token={$RollBar_Access_Token}\
-F version=$GIT_CURRENT_REVISION\
-F minified_url=///front/dist/webapp/$MINIFIED_JS \
-F source_map=@dist/webapp/${MINIFIED_JS}.map;
尝试此操作后,我们成功地将 main.[hash].js 文件上传到 Rollbar 服务器,并认为它会正常工作,直到我们在进行上述更改后看到错误的堆栈跟踪。这是堆栈跟踪。正如我们所见,它无法将其解析为指向我们源代码的行,因此难以在本地开发环境中进行调试。 正如您在上图中看到的那样,它显示“源地图不适用于某些缩小文件”,这让我们意识到为什么它无法翻译。所以我们去检查了哪个文件上传失败,这是相同的截图 所以,经过多次尝试,我们想到了只是手动上传失败的文件,我们附加了它想要的源映射,我们将 URL 设置为 http://localhost/main.[hash].js 和适当的 GIT 版本的源代码。是的,事情开始正常工作,它能够将错误指向我们的源代码。现在,我们想知道是否有任何方法可以通过我们的 shell 脚本来完成,就像我们在生产中所做的那样,这样我们每次在本地环境中使用 RollBar 工作时都不必经历手动过程。任何帮助或线索表示赞赏。
文章引用
https://medium.com/angular-in-depth/debug-angular-apps-in-production-without-revealing-source-maps-ab4a235edd85
https://pusher.com/tutorials/error-handling-angular -part-4
https://www.mattzeunert.com/2016/02/14/how-do-source-maps-work.html