Debugging in Safari's Web Inspector, when using a module loader like SystemJS
我正在使用es6 modules,TypeScript和SystemJS作为模块加载器来创建Ionic应用。这是我的设置:
tsconfig.json:
1 2 3 4 5 6 7 8
| {
"compilerOptions": {
...
"target":"es5",
"module":"system",
...
}
} |
index.html:
1 2 3
| <script src="lib/system.js">
<script src="systemjs.config.js">
System.import('js/app.js') |
示例脚本(TypeScript):
1 2 3 4 5
| import {IConfig} from"./app-config";
export class ConfigLoader {
...
} |
Chrome一切正常。但是,在使用Safari的Web Inspector进行调试时,我无法在脚本中放置任何断点,因为Web Inspector仅显示直接从HTML(通过脚本标记)加载的脚本,而不显示XHR(在我的情况下是通过SystemJS)加载的脚本。这意味着我无法调试自己的脚本,这当然是不可接受的。
我试图像以前一样通过使用SystemJS来解决此问题,但也将脚本标签放在html中,如下所示:
1 2 3 4 5
| <script src="lib/system.js">
<script src="systemjs.config.js">
<script src="js/app-config.js">
... other app scripts
System.import('js/app.js') |
但是,这不起作用,因为SystemJS对此并不满意:
Invalid System.register call. Anonymous System.register calls can only
be made by modules loaded by SystemJS.import and not via script tags.
如何使用SystemJS,同时又可以在Safari中进行调试?我正在寻找比"在每个脚本中放入调试器语句"更复杂的解决方案。
-
这似乎是一个奇怪的建议,并且自1月11日以来这个问题就一直存在,但是我建议您也许要涉足webpack。我一直在阅读SystemJS,但是我感觉不到它可以满足您的需求。
-
看起来好像您无法像运气一样将脚本加载到html中。如您所见,Chrome似乎是唯一支持此功能的浏览器。
-
可能在运行时使用Javascript动态设置断点
-
@TheMuffinMan IE11,Edge,Opera和Firefox也支持调试动态脚本。由于最终将为生产创建捆绑软件,因此请考虑在Safari中调试捆绑的代码。
-
如何在浏览器调试器本身中调试动态加载的JavaScript(使用jQuery)的可能重复项?
-
为什么只限于在Safari中调试?
-
@ user3738936,因为有时错误仅在特定的浏览器中发生
-
不知道Safaris 3%是否值得您付出努力,但也许它适合您的客户。 netmarketshare.com/browser-market-share。您可以尝试使用BrowserStack的试用版:browserstack.com/live/features browserstack.com/developer-tools看来,如果仍在进行操作,那可能值得一试。
-
使用debugger JS关键字
-
@KamilKie?czewski这个问题明确指出我正在寻找比在每个脚本中放置调试器语句更复杂的解决方案...
-
您对debugger语句有som问题吗?
-
由于debugger;无法帮助您,因此其他控制台魔术师也不会做任何事情,死胡同。因此,我认为您需要将SystemJS更改为某些静态捆绑器,例如webpack或gulp。这将带来很多工作,但是正如注释所示,SystemJS确实不适合您的情况
-
debugger怎么了?那实际上是以编程方式添加一个断点?
-
@ChristosLytras以我为例,我正在调试在iOS设备(且仅在该设备)上部署的混合应用程序(cordova)中发生的错误。在提出问题时,使用调试器语句意味着重新部署应用程序(带有调试器语句),然后在发现错误后再次进行部署以再次删除这些语句。这非常耗时。同样,调试器语句不能用于生产中无法在开发中重现的错误。
-
您可以在Safari的"源"选项卡中选择断点。您只需要激活开发人员模式即可。首选项->高级->在菜单栏中显示开发者菜单。
-
@fikkatra两个问题:a)SystemJS config包含是否正确?就是说,在标记下的配置type是否应该是其他名称? b)还想知道野生动物园的webview是否支持Promises。为什么呢我认为System.import可能需要这样做。
-
@tyskr这个问题已有3年以上的历史,因为我无法访问代码,因此无法为您验证
好吧,也许您可以将诸如WebStorm之类的IDE与强大的Web和Node调试器一起使用。
例子:


您可以在此处查看有关WebStorm调试器的更多信息。
WebStorm的一些替代方法:
原子(免费)
Intellij IDEA(社区:免费)
Visual Studio代码(免费)
...
附言:我使用WebStorm:D开发Ionic和React应用程序
-
我一直在尝试进入Webstorm,但是我拥有VS Code扩展系统提供的许多有用功能,而Webstorm却没有,很难实现这一目标。
您是否考虑过使用远程调试器,例如https://github.com/google/ios-webkit-debug-proxy。
也有ghostlab,这是一篇很好的入门指南https://css-tricks.com/using-chrome-devtools-to-debug-javascript-in-any-browser-with-ghostlab-2/
写入js文件关键字debugger并在资源管理器中打开inspect element
刷新页面和调试模式时...
好好享受 ;-)
-
该问题明确指出"我正在寻找比在每个脚本中放置调试器语句还要复杂的解决方案……"