有人在这方面取得过成功吗?
4 回答
我认为这或多或少是一个未解决的问题: https ://github.com/jashkenas/coffee-script/issues/2779 。最后一个有意义的评论来自一个月前的 jwalton。
尽管如此,增加对它的支持似乎并不是火箭科学,所以它可能很快就会到来。
Michael Ficarra(CoffeeScript Redux 的创建者)建议使用https://github.com/michaelficarra/commonjs-everywhere。
两个警告:
- 它仅适用于捆绑 CommonJS 模块。
- 它使用的是仍然处于测试阶段的 CoffeeScript Redux(尽管看起来工作得很好),并且与原始 CoffeeScript 编译器不是 100% 兼容。
因此,这不适用于您特别要求的“连接”。
添加于 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 插件已经有一段时间(两个月)对连接文件的源映射支持,有效地证明了我原来的答案是不正确的。
即将推出的 Snockets 2.0 版也将支持它。
我需要在缩小之前注释 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'))
});
同样的方法也适用于其他情况。就我而言,这是唯一有效的方法。
我最终使用了browserify,使用coffeeify 作为转换选项,并启用了browserify 的调试选项。我在 main.js 文件的每个请求中捆绑应用程序,并且任何运行时错误都会以相当不错的准确性显示在我的原始源中。
当然,用我的眼球将连接/编译的 js 中的运行时错误映射回咖啡源更胜一筹!
我写了一个完美的任务。一探究竟