webstorm 7 / karma服务器在调试coffeescript时查找错误的源映射文件

时间:2013-10-05 17:24:24

标签: coffeescript webstorm karma-runner source-maps

在使用karma测试运行器进行测试时,我正试图让调试器使用我的coffeescript文件。

据说,我需要做的就是告诉Webstorm文件观察器生成源图,调试器将与karma测试运行器一起使用。不幸的是,调试器似乎无法识别coffeescript编译器输出的映射文件。它寻找file.coffee - > file.js.map。然而,尽管试图得到一些其他结果,地图文件总是file.coffee - > file.map

我的业力配置文件有以下内容(显然不是全部,只是相关部分):

module.exports = (config) ->
  config.set
    files: [
      '../app/scripts/**/*.coffee'
      'spec/*.coffee']
    preprocessors: {
      '../**/*.coffee': 'coffee'
    }

我已尝试使用文件观察器进行各种配置:

带有参数的单个文件观察器:“ - compile --bare --map $ FileName $”,输出路径刷新为:“$ FileNameWithoutExtension $ .js.map”或“$ FileNameWithoutExtension $ .js :$ $ FileNameWithoutExtension .js.map“

第一个版本生成一个空白的file.js.map,第二个版本生成一个空白的file.js.map和标准的file.map,这是一个很好的源图文件。

我已经尝试了一个文件观察器只有“--compile --bare”输出路径:“$ FileNameWithoutExtension $ .js”和第二个只有“--map”输出路径:“$ FileNameWithoutExtension $。 js.map”。这会输出一个空白的file.js.map而没有实际的地图。

我尝试过一个只有“--compile --bare”的文件观察器输出路径:“$ FileNameWithoutExtension $ .js”和第二个只有“--compile --map”输出路径:“$ FileNameWithoutExtension $ .js.map”。这会输出一个空白的file.js.map而没有实际的地图。

同时,当我在调试模式下运行测试时,Karma Server会报告:

WARN [web-server]: 404: /base/spec/schedule-spec.js.map?time=1380945586331
WARN [web-server]: 404: /absolute/Users/Randolph/Documents/Sites/MTF-Minimal/app/scripts/app.js.map?time=1380945586083
etc...

显然,服务器假设地图将被称为file.js.map,而实际上coffeescript输出的文件没有“js”。我似乎无法更改输出源图文件的调用内容,我也看不到告诉调试器要查找的内容。

顺便说一句,调试器也告诉我它找不到加载我的文件的非coffeescript库的地图文件,如angular.js和jquery.js。也许这是一个错误的线索。

我已经向JetBrains提交了一张票,并将在这里分享他们的回复。但是,如果有人知道解决方案,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:2)

使调试器使用文件观察器生成的.js和.map文件的唯一方法是在karma配置文件中加载这些生成的.js文件,而不是.coffee文件。当您加载.coffee文件时,karma实际上并不是由transpiler生成的文件,而是由咖啡预处理器生成的.js文件,并且这些文件没有生成源映射,因此调试器不知道如何将它们映射到你的咖啡文件。这里有2个选项:

  • 加载由文件监视器生成的.js文件,而不是您的karma配置中的原始.coffee文件,如:

(片断)

files: [
'../app/scripts/**/*.js'
'spec/*.js'
]
  • 在karma中配置coffeePreprocessor以使用源映射,例如:

(摘录)

files: [
'../app/scripts/**/*.coffee'
'spec/*.cofee'
],
preprocessors: {
            '**/*.coffee': ['coffee']
        },
coffeePreprocessor: {
            options: {
                bare: true,
                sourceMap: true
            },
            // transforming the filenames
            transformPath: function ( path ) {
                return path.replace( /\.js$/, '.coffee' );
            }
        },
...

为了能够使用第二个选项,您需要确保使用最新版本的业力和业力咖啡预处理器