2014-12-08 32 views
7

Sto cercando di ottenere mappe sorgente per i miei file JavaScript che funzionano con Chrome. Il problema con lo script gulp corrente è che le mappe sorgente (create da Browserify) portano a versioni minificate dei file.Mappe sorgente utilizzando gulp, Browserify, reactify, UglifyJS

Ad esempio, supponiamo che app.jsx sia un file di immissione per Browserify e che contenga le chiamate require('a') e require('b'). app.jsx viene browserificato, riattivato e uglifyied e scritto in app.js come previsto. Tuttavia, tutte le origini mappe riferimenti all'interno del modulo e il modulo ab sono anche minified:

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')); 
}); 

Tutte le idee su come ottenere questo lavoro?

risposta

3

Sembra che si tratti di un problema con uglifyify (https://github.com/hughsk/uglifyify/issues/16). Sembra proprio che non sappia come generare mappe di origine.

ci sono alcune alternative:

  1. Uglify dopo bundling con il plugin gulp-uglify e il plugin gulp-sourcemaps. Purtroppo questo è leggermente meno ottimale dal momento che non rimuoverà le dichiarazioni dead require.

  2. Creazione di build di sviluppo e distribuzione separati. È quindi possibile generare mappe di origine per la build di sviluppo senza alcuna riduzione. La tua configurazione di distribuzione potrebbe essere migliorata senza mappe di origine.

+0

Il problema con 1. è il browserify inline la mappa del sourc nel file e quindi uglify spoglia il commento. Ho optato per 2, che non amo perché non testiamo costantemente il codice nel modo in cui viene eseguito in produzione, ma quella categoria di errori raramente accade nella mia esperienza. –

+1

Devi dire a gulp sourcemaps di leggere le mappe esistenti. 'sourcemaps.init ({loadMaps: true})' –

+0

Ah, pensavo che non avrebbe funzionato per le mappe sorgente in linea, ma dopo aver letto la documentazione si è sicuramente corretti. Tuttavia, vorrei comunque utilizzare la strategia di minificazione più ottimale per la distribuzione, il che significa che avrò un flusso di sviluppo diverso a prescindere. Probabilmente starà attaccato alla strategia delle build separate. Grazie mille per i tuoi suggerimenti però. –

Problemi correlati