2015-11-18 17 views
7

Sto provando a browserizzare la mia app di reazione per la produzione usando gulp e invidio all'impostazione di NODE_ENV. Quindi posso rimuovere l'avviso di reazione, la segnalazione degli errori nella console e persino il mio codice per disabilitare alcune funzionalità come la richiesta di react-addons-perf.Disabilita chrome reagisci DevTools per la produzione

E funziona benissimo. Quando cerco nei miei app.js per "produzione" per vedere se ci sono condizioni tipiche tesi:

if("development" !== "production") { 
    ... 
} 

Non c'è nulla, quindi, come ho detto, sembra funzionare bene.

Ma, posso ancora vedere che chrome's reagisce scheda DevTools con tutti i componenti reagire, come se fossi in un sito web di sviluppo. Come posso disabilitare questa scheda negli strumenti di sviluppo di Chrome?

Ecco il mio compito sorso:

var production = process.env.NODE_ENV === 'production' ? true : false; 
var environment = process.env.NODE_ENV ? process.env.NODE_ENV : 'dev'; 

... 

var bundler = browserify({ 
    debug: !production, 

    // These options are just for Watchify 
    cache: {}, packageCache: {}, fullPaths: true 
}) 
.require(require.resolve('./dev/client/main.js'), { entry: true }) 
.transform(envify({global: true, _: 'purge', NODE_ENV: environment}), {global: true}) 
.transform(babelify) 
.transform(reactify); 

var start = Date.now(); 
bundler.bundle() 
    .on('error', function (err) { 
     console.log(err.toString()); 
     this.emit("end"); 
    }) 
    .pipe(source('main.js')) 
    .pipe(gulpif(options.uglify, streamify(uglify()))) 
    .pipe(gulpif(!options.debug, streamify(stripDebug()))) 
    .pipe(gulp.dest(options.dest)) 
    .pipe(notify(function() { 
     console.log('Built in ' + (Date.now() - start) + 'ms'); 
    })); 
}; 
+1

Il plug-in effettivo in Chrome? Perché vorresti farlo? Il tuo js non dovrebbe contenere nulla di sensibile. Perché Chrome ti consente, da un sito web, di modificare le cose in Chrome? Pensaci: sarebbe un enorme difetto di sicurezza, essere in grado di attivare/disattivare i contenuti nel browser degli utenti con javascript. –

+1

Sì, il plugin per Chrome. Non preoccuparti, l'utente non può fare nulla se non è autenticato: ogni richiesta viene verificata con un token sul lato server con una chiave segreta forte (1024 caratteri). La mia domanda è, è possibile e come? Per quanto ne so, è possibile farlo, quindi qui sto chiedendo come e perché non sta funzionando con il mio compito di Gulp. – Poirette

+0

Ah vedo, non funzionerà se non c'è un globale 'React' o' require', ma non sono sicuro di un'impostazione specifica –

risposta

9

Secondo una questione su Github, è possibile aggiungere esegue una singola linea javascript prima di reagire viene caricato per impedirlo.

Da #191 of react-devtools

<script> 
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function() {} 
</script> 

Poi, si può considerare di chiudere questo con la vostra condizione ambiente, come quello che si potrebbe fare sth come qui di seguito nel vostro rendering lato server. Diciamo Pug (precedentemente noto come Jade):

#{process.env.NODE_ENV == 'production' ? "window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function(){}" : ""} 

Tuttavia, sarebbe comunque una buona pratica di mettere la logica di business ei dati sensibili di nuovo al vostro server.

+0

Ricevo l'errore seguente: Impossibile impostare la proprietà 'inject' di undefined –

+1

vai a 'chrome: // extensions /' per vedere se è attivato "React Developer Tools" – PETEroid

+1

@LoveTrivedi stai eseguendo il rendering attraverso il server? Ricorda Nodo non ha un oggetto finestra. Avvia lo snippet in 'if (window) {...}' –

Problemi correlati