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

时间:2013-04-12 06:45:36

标签: javascript compiler-construction coffeescript source-maps

有没有人对此有任何成功?

4 个答案:

答案 0 :(得分:13)

我认为这或多或少是一个未解决的问题: https://github.com/jashkenas/coffee-script/issues/2779。最后一个吝啬的评论来自一个月前的jwalton。

尽管如此,增加对它的支持似乎并不是火箭科学,所以它很快就会到来。

Michael Ficarra(CoffeeScript Redux的创建者)建议使用https://github.com/michaelficarra/commonjs-everywhere

两个警告:

  • 仅适用于捆绑CommonJS模块。
  • 它使用CoffeeScript Redux,它仍处于测试阶段(虽然看起来效果很好),并且与原始的CoffeeScript编译器不完全兼容。

所以这对你要求的具体内容不起作用,“连接”。

4月14日增加

您可能会对这些内容感到满意:combine-source-map和/或generate-sourcemap,两者都是同一作者。

于4月26日添加

这看起来非常简单:https://npmjs.org/package/mapcat。您只需要将咖啡编译器生成的各个源映射文件提供给它。

5月16日添加

Mariusz Nowak刚刚发布webmake-coffee。与CommonJS Everywhere一样,它需要将代码组织为CommonJS模块。与CommonJS无处不同,它使用常规的CoffeeScript。

似乎Grunt Coffee-Script plugin已经有很长一段时间(两个月)对连接文件提供了源地图支持,有效地证明了我的原始答案是错误的。

即将推出的Snockets 2.0版也将支持它。

答案 1 :(得分:2)

我最终使用coffeeify作为转换选项使用browserify,并启用了browserify的调试选项。我在我的main.js文件的每个请求上捆绑了应用程序,并且任何运行时错误都显示在我的原始源代码中,具有相当不错的准确性。

当然用我的眼球将连接/编译的js中的运行时错误映射回咖啡源!

答案 2 :(得分:2)

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

显然,使用gulp-sourcemaps这不是问题:

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'))
});

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

答案 3 :(得分:1)

我写了一个笨拙的任务,完美无缺。 Check it out