为从Coffeescript编译的多个连接javascript文件生成源映射

为从Coffeescript编译的多个连接javascript文件生成源映射,javascript,compiler-construction,coffeescript,source-maps,Javascript,Compiler Construction,Coffeescript,Source Maps,有人在这方面取得过成功吗?我认为这或多或少是一个尚未解决的问题: . 最后一个有意义的评论是一个月前来自jwalton的 尽管如此,似乎火箭科学并没有为它增加支持,所以它可能很快就会到来 MichaelFicarra(CoffeescriptRedux的创建者)建议使用 两个警告: 它只适用于绑定CommonJS模块 它使用的是CoffeeScript Redux,它仍处于测试阶段(尽管它似乎工作得很好),并且与原始的CoffeeScript编译器不完全兼容 因此,这不适用于您特别要求的“串

有人在这方面取得过成功吗?

我认为这或多或少是一个尚未解决的问题: . 最后一个有意义的评论是一个月前来自jwalton的

尽管如此,似乎火箭科学并没有为它增加支持,所以它可能很快就会到来

MichaelFicarra(CoffeescriptRedux的创建者)建议使用

两个警告:

  • 它只适用于绑定CommonJS模块
  • 它使用的是CoffeeScript Redux,它仍处于测试阶段(尽管它似乎工作得很好),并且与原始的CoffeeScript编译器不完全兼容
因此,这不适用于您特别要求的“串联”

4月14日增补 你可能会很幸运:和/或,都是同一作者写的

四月二十六日增补 这看起来很简单:。您只需向它提供由coffee编译器生成的各个源映射文件

5月16日增补 刚刚发布。与CommonJS一样,它需要将代码组织为CommonJS模块。与CommonJS everywhere不同,它使用常规的咖啡脚本

它似乎已经有相当长一段时间(两个月)对连接文件的源代码映射支持,有效地证明了我最初的答案是错误的


即将发布的Snockets 2.0版也将支持它

我最终使用了browserify,使用coffeeify作为转换选项,并启用了browserify的调试选项。每次请求main.js文件时,我都会将应用程序捆绑起来,任何运行时错误都会以相当高的精度显示在我的原始源代码中


当然比用我的眼球将连接/编译的js中的运行时错误映射回coffee源代码要好

我写了一个可以完美完成这一任务的咕噜任务

我需要在缩小之前对AngularJS代码进行注释,但是
grunt ng annotate
不接受输入源映射,因此我无法使用CoffeeScript编译器生成的映射

显然,这不是一个问题:

var gulp = require('gulp');
var $ = require('gulp-load-plugins')(); // loading gulp plugins lazily
                                       // remember to include them in the package.json

gulp.task('appJS', function() {
  // concatenate compiled .coffee files and js files into build/app.js
  gulp.src(['./app/**/*.js','./app/**/*.coffee'])
    .pipe($.sourcemaps.init())
    .pipe($['if'](/[.]coffee$/, $.coffee({bare: true}).on('error', $.util.log)))
    .pipe($.concat('app.js'))
    .pipe($.ngAnnotate())
    .pipe($.uglify())
    .pipe($.sourcemaps.write())
    .pipe(gulp.dest('./build'))
});

同样的方法也适用于其他情况。就我而言,这是唯一有效的方法。

感谢Meryn提供的参考资料
grunt contrib coffee
创建一个连接的coffee文件,然后使用源映射对其进行编译。一个更好的选择是运行
grunt-contrib-coffee
,然后运行
grunt-mapcat
。这将构建一个指向每个单独咖啡文件的源映射。