2014-12-08 4 views
7

Я пытаюсь получить исходные карты для своих файлов JavaScript, работающих с Chrome. Проблема с текущим сценарием gulp заключается в том, что исходные карты (созданные Browserify) приводят к уменьшенным версиям файлов.Исходные карты с использованием gulp, Browserify, reactify, UglifyJS

Например, app.jsx является файлом записи для Browserify, и в нем есть require('a') и require('b'). app.jsx получает браузер, проверяется и угадывается и записывается в app.js, как и ожидалось. Тем не менее, все карты источника ссылки в модуле a и модуля b также минимизированы:

var gulp = require('gulp'), 
    browserify = require('browserify'), 
    watchify = require('watchify'), 
    source = require('vinyl-source-stream'), 
    buffer = require('vinyl-buffer'), 
    bundler; 

bundler = browserify({ 
    entries: '/app.jsx', 
    cache: {}, 
    packageCache: {}, 
    fullPaths: true 
}); 

bundler 
    .transform('reactify'); 
    .transform({ 
     global: true 
    }, 'uglifyify'); 

bundler = watchify(bundler); 
bundler.on('update', function() { 
    return bundler 
     .bundle() 
     .pipe(source('app.js')) 
     .pipe(buffer()) 
     .pipe(gulp.dest('/js')); 
}); 

Любые идеи о том, как получить эту работу?

ответ

3

Похоже, что это проблема с uglifyify (https://github.com/hughsk/uglifyify/issues/16). Кажется, он просто не знает, как создавать исходные карты.

Есть несколько альтернатив:

  1. уродовать после пакетирования с gulp-uglify плагиным и gulp-sourcemaps плагина. К сожалению, это немного менее оптимально, так как он не удаляет мертвые require заявления.

  2. Создайте отдельные разработки и рассылки сборки. Затем вы можете генерировать исходные карты для своей разработки без уклонения. Ваша сборка распределения может быть очищена без исходных карт.

+0

Проблема с 1. является браузером, вставляет исходную карту в файл, а затем uglify блокирует комментарий. Я выбрал 2, которые мне не нравятся, потому что вы не постоянно проверяете код так, как он запускается в производстве, но эта категория ошибок редко случается в моем опыте. –

+1

Вам нужно сообщить исходным файлам gulp, чтобы прочитать существующие карты. 'sourcemaps.init ({loadMaps: true})' –

+0

А я думал, что это не сработает для встроенных исходных карт, но после прочтения документации вы, безусловно, правы. Тем не менее, я все же хотел бы использовать более оптимальную стратегию минимизации для развертывания, что означает, что у меня будет другой поток развития независимо от того. Вероятно, будет придерживаться отдельной стратегии построения. Благодарю вас за предложения. –