Имел ли кто-нибудь успех с этим?
Создание исходных карт для нескольких конкатенированных файлов javascript, составленных из Coffeescript
Ответ 1
Я думаю, что это более или менее нерешенная проблема: https://github.com/jashkenas/coffee-script/issues/2779. Последний значащий комментарий был из jwalton, месяц назад.
Тем не менее, это не похоже на науку о ракетах, чтобы добавить поддержку для нее, поэтому она, скорее всего, скоро появится.
Майкл Фикарра (создатель CoffeeScript Redux) предложил использовать https://github.com/michaelficarra/commonjs-everywhere.Два оговорки:
- Он работает только для объединения модулей CommonJS.
- Он использует CoffeeScript Redux, который все еще находится в стадии бета-тестирования (хотя работает довольно хорошо), а не на 100% совместим с оригинальным компилятором CoffeeScript.
Так что это не работает для того, что вы просите специально, "конкатенация".
Добавлено 14 апреля
Возможно, вам повезло с ними: combine-source-map и/или generate-sourcemap, как одним автором.
Добавлено 26 апреля
Это выглядит очень просто: https://npmjs.org/package/mapcat. Вам просто нужно передать его отдельным файлам исходной карты, созданным компилятором кофе.
Добавлен май 16
Mariusz Nowak только что выпустил webmake-coffee. Подобно CommonJS Everywhere, он требует, чтобы код был организован как модули CommonJS. В отличие от CommonJS повсюду, он использует обычный CoffeeScript.
Похоже, что плагин Grunt Coffee- Script поддерживал поддержку исходных карт для конкатенированных файлов довольно долго (два месяца), фактически доказывая, что мой первоначальный ответ неверен.
В будущей версии 2.0 Snockets также будет поддержка.
Ответ 2
Я закончил работу с браузером, используя параметр coffeeify в качестве опции преобразования, и включив опцию debug debug. Я собираю приложение по каждому запросу для моего файла main.js, и любые ошибки времени выполнения отображаются в моем исходном источнике с довольно приличной точностью.
Несомненно, биты отображают ошибки времени выполнения в конкатенированном/скомпилированном js обратно в источник кофе с моими глазными яблоками!
Ответ 3
Мне нужно было аннотировать код 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'))
});
Такой же подход работает и в других ситуациях. В моем случае это единственный подход, который сработал.
Ответ 4
Я написал ворчащую задачу, которая делает это безупречно. Проверьте это