关于node.js:使用node-inspector调试CoffeeScript源代码

Debug CoffeeScript sources with node-inspector

我有一段时间使用CoffeeScript编写Node.js程序。 如果我使用Source Maps编译源代码,则可以使用node-inspector进行调试。

但是,当我尝试使用coffee-script/register创建混合的Javascript / CoffeeScript应用程序时:

1
2
3
#!/usr/bin/env node
require('coffee-script/register');
require('../src/client');

然后,node-inspector显示编译的Javascript。

当我没有明确编译node-inspector时,如何查看node-inspector中的实际*.coffee源?


免责声明:我是Node Inspector的维护者

为了在Node Inspector中查看实际的*.coffee文件,您需要提供一个源映射文件,该文件描述如何将Node / V8运行时内部加载的已转换javascript映射到您的coffee脚本源。此外,转译的javascript的文件名必须与原始脚本名称(AFAIK)不同。

这是使用require('coffee-script/register')的麻烦:它将咖啡脚本源转换为javascript源,同时保留相同的文件名。换句话说,运行时(和Node Inspector)看到您的*.coffee包含已转译的javascript,因此它无法显示相同文件名的coffee脚本。同样是AFAIK,Coffee编译器在这种情况下不会发出任何源映射。

我看到两种可能的方法来解决此问题:

  • 修改coffee-script/register中的loadFile()

    • 发出源地图并将其保存到文件
    • 将不同的文件名传递给module._compile,例如script.coffee.js
  • 修改coffee-script/register以发出嵌入式源映射。修复Chrome DevTools和/或Node Inspector以支持嵌入式源地图。

  • 参考文献:

    • coffee-script / register中的loadFile()
    • 节点检查器问题,讨论为什么coffee --nodejs --debug app.coffee现在不起作用:https://github.com/node-inspector/node-inspector/issues/224
    • 讨论内联源映射的Node Inspector问题:https://github.com/node-inspector/node-inspector/issues/401