2015-11-18 6 views
7

Ich versuche meine reagiere App für die Produktion mit Hilfe von gulp und envify zu browserfizieren, um NODE_ENV einzurichten. So kann ich reagieren Warnung, Fehlerberichte in der Konsole und sogar meinen Code, um einige Funktionen wie die Anforderung von react-addons-perf zu deaktivieren.Deaktivieren Chrom reagieren DevTools für die Produktion

Und es funktioniert super. Als ich in meinem app.js für „Produktion“ zu sehen, zu suchen, wenn es Thesen sind typische Bedingungen:

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

Es gibt nichts, so, wie ich schon sagte, es scheint gut zu funktionieren.

Aber ich kann immer noch sehen, dass Chrome DevTools Tab mit allen reagierenden Komponenten reagieren, als ob ich auf einer Entwicklungswebsite wäre. Wie kann ich diese Registerkarte in den Dev-Tools von Chrome deaktivieren?

Hier ist meine Aufgabe schluck:

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

Das eigentliche Plugin in Chrome? Warum willst du das machen? Deine js sollte nichts Sensibles enthalten. Warum ermöglicht Ihnen Chrome, auf einer Website, Dinge in Chrome zu ändern? Denken Sie darüber nach - das wäre eine massive Sicherheitslücke, um Dinge im Browser des Benutzers mit Javascript ein-/ausschalten zu können. –

+1

Ja, das Chrome-Plugin. Keine Sorge, der Benutzer kann nichts tun, wenn er nicht authentifiziert ist: Jede Anfrage wird mit einem Token auf der Serverseite mit einem starken geheimen Schlüssel (1024 Zeichen) überprüft. Meine Frage ist, ist es möglich und wie? Soweit ich weiß, ist es möglich, es zu tun, also frage ich hier, wie und warum es nicht mit meiner Schluckaufgabe funktioniert. – Poirette

+0

Ah ich sehe, es wird nicht funktionieren, wenn es keine globale 'React' oder' require' gibt, aber nicht sicher über eine bestimmte Einstellung –

Antwort

9

Nach einer Ausgabe auf Github, können Sie eine einzelne JavaScript-Zeile hinzufügen ausführen, bevor reagieren geladen wird, es zu verhindern.

Von #191 of react-devtools

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

Dann können Sie wickeln diese mit Ihrer Umgebung Zustand betrachten, wie, dass man etw wie unten in der Server-Seite Rendering tun könnte. Sagen wir Mops (früher als Jade bekannt):

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

Allerdings wäre es immer noch eine gute Praxis, die Business-Logik und die sensiblen Daten auf den Server zurück zu setzen.

+0

Ich erhalte folgenden Fehler: Kann Eigenschaft 'inject' von undefined nicht setzen –

+1

gehen zu 'chrome: // extensions /' um zu sehen, ob die "React Developer Tools" aktiviert ist – PETEroid

+1

@LoveTrivedi renderst du das über den Server? Erinnern Knoten hat kein Fensterobjekt. Wickeln Sie das Snippet in 'if (window) {...}' –