Сохранение исходных карт при объединении потоков JS (для объединения зависимостей библиотеки с пакетом браузера)

В моем текущем рабочем процессе мне нужно создать браузерные пакеты, но я также хочу объединить нестандартные js-библиотеки в начало файла, чтобы выставить глобальные переменные, а также уменьшить количество http-запросов и размер js-файлов. (Некоторые из этих библиотек могут также понадобиться другим пакетам)

В настоящее время у меня есть задача gulp, которая создает пакет browserify и объединяет все необходимые библиотеки в начало выходного файла, однако я обнаружил, что в момент слияния потоков мои исходные карты ломаются и в веб-инспекторе; полученная карта показывает только пакет браузера с предварительным углифированием, а не отдельные модули js.

var gulp          = require("gulp"),
buffer            = require('vinyl-buffer'),
gulpif            = require("gulp-if"),
sourcemaps        = require("gulp-sourcemaps"),
merge             = require('merge-stream'),
concat            = require('gulp-concat'),
uglify            = require("gulp-uglify")
livereload        = require("gulp-livereload");

// compile scripts
gulp.task("scripts", function() {
  "use strict";

  // Iterate over bundles
  var tasks = config.browserifyBundles.map(function(item){

    // Use entry file for output file name
    var outputName = item.mainfile.replace(/^.*[\\\/]/, ''); 
    var browserifyStream = browserify({
      entries: item.mainfile,
      debug: env !== "production"
    }).bundle()
    .on("error", notify.onError())
    .pipe(source(outputName))
    .pipe(buffer())
    .pipe(gulpif(env !== "production", sourcemaps.init()))
    .pipe(gulpif(env !== "production", sourcemaps.write()));

    // Get files to concat stream from json array
    var libStream = gulp.src(item.concat);

    return merge(libStream, browserifyStream)
      .pipe(gulpif(env !== "production", sourcemaps.init({loadMaps: true})))
      .pipe(concat(outputName))
      .pipe(uglify())
      .pipe(gulpif(env !== "production", sourcemaps.write()))
      .pipe(gulp.dest(config.projectDir + "js/"))
      .pipe(notify("updated"))
      .pipe(livereload());
  });


  // create a merged stream
  es.merge.apply(null, tasks);
});

(обратите внимание, что моя задача также считывает массив конфигурации json для создания нескольких пакетов, если их несколько)

Есть ли способ сохранить исходные карты из предварительно объединенных потоков? loadmaps, для которых установлено значение true, похоже, не работает.

Кроме того, в качестве проверки здравомыслия, будет ли мой подход считаться разумным? Я упускаю какой-то безумно простой способ достижения желаемого результата?


person Gaffen    schedule 04.01.2016    source источник
comment
См. Должны ли вопросы включать «теги» в свои заголовки? , где консенсуса нет, не должны!   -  person    schedule 04.01.2016
comment
Извинения @AndreasNiedermair - спасибо за редактирование   -  person Gaffen    schedule 04.01.2016


Ответы (1)


Убедитесь, что следующая строка находится в начале канала, это должно правильно сохранить исходные карты.

.pipe(gulpif(env !== "production", sourcemaps.init()))
person jeanfrg    schedule 27.07.2017
comment
Боюсь, что я продвинулся совсем немного по сравнению с год и 7 месяцев назад! Когда у меня будет время, я посмотрю, смогу ли я проверить, работает ли это, но большое спасибо за ответ. Если это сработает сейчас, я дам вам знать и приму ваш ответ :) - person Gaffen; 02.08.2017
comment
Ух ты! Не понял, что это был старый ха-ха - person jeanfrg; 02.08.2017