Подтвердить что ты не робот

Создание исходных карт для нескольких конкатенированных файлов javascript, составленных из Coffeescript

Имел ли кто-нибудь успех с этим?

4b9b3361

Ответ 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

Я написал ворчащую задачу, которая делает это безупречно. Проверьте это