Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有尝试将小程序的source-map导入sentry解析吗? #2

Open
NullYing opened this issue May 30, 2019 · 33 comments
Open

有尝试将小程序的source-map导入sentry解析吗? #2

NullYing opened this issue May 30, 2019 · 33 comments

Comments

@NullYing
Copy link

RT

@alexayan
Copy link
Owner

alexayan commented May 31, 2019

有时间的话,会提供小程序接入 Source Map 的方案,估计要等一段时间

@NullYing
Copy link
Author

NullYing commented Jun 3, 2019

还有一个问题,这个包不支持原生开发的小程序?

@alexayan
Copy link
Owner

alexayan commented Jun 3, 2019

还有一个问题,这个包不支持原生开发的小程序?

https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html 可以尝试配置 babelSetting .ignore 忽略对引入的 sentry-mina.js 进行二次编译,不一定能解决问题。

@NullYing
Copy link
Author

NullYing commented Jun 6, 2019

不支持就没辙了,目前接触的小程序都是原生开发的

@NullYing
Copy link
Author

NullYing commented Jun 6, 2019

thirdScriptError 
 sdk uncaught third Error 
 regeneratorRuntime is not defined 
 ReferenceError: regeneratorRuntime is not defined
    at http://127.0.0.1:23719/appservice/sentry-mina.js:1232:35
    at http://127.0.0.1:23719/appservice/sentry-mina.js:1311:10
    at Object.defineProperty.value (http://127.0.0.1:23719/appservice/sentry-mina.js:1346:6)
    at n (http://127.0.0.1:23719/appservice/sentry-mina.js:10:93)
    at Object.defineProperty.value (http://127.0.0.1:23719/appservice/sentry-mina.js:1193:20)
    at n (http://127.0.0.1:23719/appservice/sentry-mina.js:10:93)
    at Object.defineProperty.value (http://127.0.0.1:23719/appservice/sentry-mina.js:996:13)
    at n (http://127.0.0.1:23719/appservice/sentry-mina.js:10:93)
    at Object.n.undefined.window.console (http://127.0.0.1:23719/appservice/sentry-mina.js:1629:13)
    at n (http://127.0.0.1:23719/appservice/sentry-mina.js:10:93)
``

@NullYing
Copy link
Author

NullYing commented Jun 6, 2019

跑起来了,缺了regeneratorRuntime,引入了就可以了
在sentry-mina.js前面加一行
const regeneratorRuntime = require('./utils/regenerator-runtime/runtime.js')
对应的文件在这里下载
https://github.com/facebook/regenerator/blob/master/packages/regenerator-runtime/runtime.js

删除掉runtime.js中这部分

try {
  regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
  // This module should not be running in strict mode, so the above
  // assignment should always work unless something is misconfigured. Just
  // in case runtime.js accidentally runs in strict mode, we can escape
  // strict mode using a global Function call. This could conceivably fail
  // if a Content Security Policy forbids using Function, but in that case
  // the proper solution is to fix the accidental strict mode problem. If
  // you've misconfigured your bundler to force strict mode and applied a
  // CSP to forbid Function, and you're not willing to fix either of those
  // problems, please detail your unique predicament in a GitHub issue.
  Function("r", "regeneratorRuntime = r")(runtime);
}

@alexayan
Copy link
Owner

alexayan commented Jun 7, 2019

赞,你发个 Pull Request 吧

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

赞,你发个 Pull Request 吧

稍等...
在折腾source-map,有什么诀窍吗?map文件你是用uglifyjs命令生成的还是直接到哪里拿?
我文件已经上传到sentry然而不认

之前我折腾vue的source-map成功过

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

还有一个,最新的开发工具带有增强编译的选项,打开后就能支持了,不会缺regeneratorRuntime,使用这个方法会更好一点

https://developers.weixin.qq.com/community/develop/doc/00066877c54eb0ff5488b54885b801?highLine=uglify

@alexayan
Copy link
Owner

alexayan commented Jun 7, 2019

现在 sentry 在小程序中获得的异常抛出的文件地址是错误的,需要改下这一块代码

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

image

按理来说路径应该可以通过配置来解决

@alexayan
Copy link
Owner

alexayan commented Jun 7, 2019

https://docs.sentry.io/platforms/javascript/sourcemaps/

你有按 sentry 官方的文档进行操作吗

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

https://docs.sentry.io/platforms/javascript/sourcemaps/

你有按 sentry 官方的文档进行操作吗

是的,我之前用vue是成功的,我怀疑是map文件的问题

@alexayan
Copy link
Owner

alexayan commented Jun 7, 2019

https://docs.sentry.io/platforms/javascript/sourcemaps/
你有按 sentry 官方的文档进行操作吗

是的,我之前用vue是成功的,我怀疑是map文件的问题

抽空我找个小程序项目测试下 source map

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

在小程序中获得的异常抛出的文件地址是错误的

我成功上传了app.js和app.js.map,sentry也认了map文件,不过错误行数是不正确的

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

image
实际错误位置在34行

image

@NullYing
Copy link
Author

NullYing commented Jun 7, 2019

总结一下用原生小程序会遇到的问题

  1. regeneratorRuntime在旧版开发工具是要手动引入的,新版有增强模式就支持了(开启后直接使用)
手动引入方法
在sentry-mina.js前面加一行
const regeneratorRuntime = require('./utils/regenerator-runtime/runtime.js')
对应的文件在这里下载
https://github.com/facebook/regenerator/blob/master/packages/regenerator-runtime/runtime.js

删除掉runtime.js中这部分

try {
  regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
  // This module should not be running in strict mode, so the above
  // assignment should always work unless something is misconfigured. Just
  // in case runtime.js accidentally runs in strict mode, we can escape
  // strict mode using a global Function call. This could conceivably fail
  // if a Content Security Policy forbids using Function, but in that case
  // the proper solution is to fix the accidental strict mode problem. If
  // you've misconfigured your bundler to force strict mode and applied a
  // CSP to forbid Function, and you're not willing to fix either of those
  // problems, please detail your unique predicament in a GitHub issue.
  Function("r", "regeneratorRuntime = r")(runtime);
}
  1. 代码保护功能。代码保护功能会将引入的sentry-mina.js文件再压缩一遍,导致出错。(未解决)
    image

  2. 关于source-map, 如果开启代码保护功能,开发工具会在他的目录下生成map文件,猜测如果可以开启代码保护将可以直接使用这些文件上传至sentry,来解析报错代码
    路径: /Users/xxxxx/Library/Application Support/微信开发者工具/Weappdest/xxxxxx/
    上传source-map命令:

sentry-cli releases files v2.1.5 upload-sourcemaps ./ --url-prefix "~/appservice/" --rewrite
  1. 一个bug,在体验版里面,sentry发送的堆栈会失踪,剩下一条报错信息,目前不清楚原因
    image

5.在某个基础库之前(具体哪个基础库没用测试)。sentry接收到报错后会发不出请求

总结一下,如果适配原生还是有比较多的坑要填。不需要代码保护与source-map功能的话,还是能直接使用的,并希望能优先支持一下原生开发,原生开发的小程序相对较多

@alexayan
Copy link
Owner

alexayan commented Jun 7, 2019

感谢你的建议,会对原生开发进行适配

@nttdocomo
Copy link

我也在想sourcemap的问题,有什么想法大家可以在这里讨论

@imingyu
Copy link

imingyu commented Oct 11, 2019

@ALL 各位你好,我在小程序项目中也应用了Sentry,错误是可以监控到了,但是无法定位到源码报错行数,我将小程序后台的sourceMap上传到了Sentry系统,但是还是无法定位源码,请问你们用的时候能定位到源码行数吗?是怎么做的呢?诚恳的希望得到答案,感谢各位!

@NullYing
Copy link
Author

NullYing commented Nov 3, 2019

今天更新了一下,感受到的更新:

  1. regenerator-runtime依赖不需要了
  2. 代码保护也可以开启了

@Liubasara
Copy link

请问 sourceMap 的映射问题有解决方案吗?目前我看到的对应行数还是错的。 @NullYing 谢谢。

@imingyu
Copy link

imingyu commented Apr 2, 2020

我实现了小程序的代码的sourceMap映射,具体步骤如下:

如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项

  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”

  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map

  • 使用npm全局安装sentry-cli:npm i sentry-cli -G

  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;

  • 新建【.sentryclirc】文件,写入内容:

[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

@feng138168
Copy link

如果通过webpack去打包小程序呢,可以用官方sourceMap插件去上传吗

@ni742015
Copy link

ni742015 commented Sep 8, 2021

我实现了小程序的代码的sourceMap映射,具体步骤如下:

如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项
  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”
  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map
  • 使用npm全局安装sentry-cli:npm i sentry-cli -G
  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;
  • 新建【.sentryclirc】文件,写入内容:
[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

sourcemap已上传但是不生效,有人遇到这个情况吗。。同一个版本
image

image

@NuoHui
Copy link

NuoHui commented Dec 30, 2021

@feng138168

好像不行,因为你本地构建的资源与云上打包的是不对称的,所以文件名、路径都是映射不上的。
你理解为云上打包的是一个黑盒,如果我们不知道其原理,本地模拟不出来。

@NuoHui
Copy link

NuoHui commented Dec 30, 2021

我实现了小程序的代码的sourceMap映射,具体步骤如下:

如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项
  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”
  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map
  • 使用npm全局安装sentry-cli:npm i sentry-cli -G
  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;
  • 新建【.sentryclirc】文件,写入内容:
[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

如果是有分包的小程序,怎么上传map呢

@gaoyangclub
Copy link

我实现了小程序的代码的sourceMap映射,具体步骤如下:
如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项
  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”
  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map
  • 使用npm全局安装sentry-cli:npm i sentry-cli -G
  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;
  • 新建【.sentryclirc】文件,写入内容:
[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

sourcemap已上传但是不生效,有人遇到这个情况吗。。同一个版本 image

image

先确保流程正确,check map文件和空js在sentry后台能看到,上传以后要再触发一次异常以后生效

@gaoyangclub
Copy link

gaoyangclub commented Nov 16, 2022

我实现了小程序的代码的sourceMap映射,具体步骤如下:
如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项
  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”
  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map
  • 使用npm全局安装sentry-cli:npm i sentry-cli -G
  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;
  • 新建【.sentryclirc】文件,写入内容:
[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

如果是有分包的小程序,怎么上传map呢

同样的在对应分包的app-service.map.map中也复制一个空js文件一块上传

@baozouai
Copy link

baozouai commented Dec 6, 2022

我实现了小程序的代码的sourceMap映射,具体步骤如下:
如果你是小程序项目,也想享受定位报错源码行数的功能,你除了使用https://github.com/imingyu/mp-sentry以外,你还要做如下步骤:

  • 每次发版需要为当前小程序指定一个唯一的版本号,并在初始化sentry sdk时传递给release配置项
  • 小程序审核通过后,需要在小程序管理后台(https://mp.weixin.qq.com/wxamp/wxaalarm/get_jserr?lang=zh_CN)下载“线上版本 Source Map 文件”
  • 解压下载后的文件,将【APP】目录中的【app-service.map.map】复制到一个空目录下,如:/Users/xxx/Workspace/project1-sourcemap
    在/Users/xxx/Workspace/project1-sourcemap目录下新建【app-service.js】文件,并在其中写入内容:
    //# sourceMappingURL=app-service.map.map
  • 使用npm全局安装sentry-cli:npm i sentry-cli -G
  • 访问https://sentry部署站点url/settings/account/api/auth-tokens/ 创建一个token,作用域选择【project:releases】;
  • 新建【.sentryclirc】文件,写入内容:
[defaults]
url=sentry部署站点的url
org=组织名
project=项目名称
[auth]
token=上一步的token值
  • 打开命令行工具,并定位到/Users/xxx/Workspace/project1-sourcemap目录
  • 输入以下命令:
sentry-cli releases files 小程序版本号 upload-sourcemaps /Users/xxx/Workspace/project1-sourcemap --rewrite --url-prefix 'https://usr'

-等待命令执行结束后即可

如果是有分包的小程序,怎么上传map呢

同样的在对应分包的app-service.map.map中也复制一个空js文件一块上传

@gaoyangclub 你好,想问下url-prefix是写死'https://usr'吗?

@suneai
Copy link

suneai commented Jul 17, 2023

怎么在原生的微信小程序里面接入source-map啊

@suneai
Copy link

suneai commented Jul 20, 2023

image
我再we平台下载的线上的sourcemap文件长这样子,你们也是吗?
还有我想问一下上传sourcemap的那个命令里面的 --url-prefix 后面跟的那个路径是啥啊?我试过了'https://usr' 、'/' 、"/appservice/"这些都不行,上传成功的sourcemap文件都没有生效,release的版本号也是和线上版本号对应的,但是就是不生效,我们的小程序是原生的,并且直接用开发工具上传的,完全没有经过打包工具处理,这种不生效是什么原因啊?有知道的吗? @NullYing @alexayan @imingyu

@wuweikd
Copy link

wuweikd commented Jun 5, 2024

有大佬有方案了吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests