2016-04-14 2 views
0

Ich habe mich entschieden, ReactJS auszuprobieren. Außerdem habe ich beschlossen, Gulp für die Kompilierung von .jsx zu .js zu verwenden, auch zum ersten Mal.Wie kompiliert ReactJS für die Verwendung auf dem Server mit Befehlszeilenargumenten?

Ich kann es kompilieren kein Problem für die Client-Nutzung mit browserify. Hier ist meine Aufgabe schluck:

browserify("./scripts/main.jsx") 
.transform(
    babelify.configure({ 
     presets: ["react"] 
    })) 
.bundle() 
.pipe(source('bundle.js')) 
.pipe(gulp.dest('./scripts/')); 

Aber da ich PHP verwenden, um Daten zu erzeugen, ich brauche diese Daten an den Knoten zu erhalten. Wenn ich browserify verwende, kann ich die process.argv im Knoten nicht verwenden. Ich kann Daten in Datei speichern und diese Datei im Knoten lesen, so dass ich nicht den gesamten Status an den Knoten übergeben müsste, aber ich muss trotzdem die identifizierenden Argumente übergeben, damit der Knoten weiß, welche Datei geladen werden soll.

Was sollte ich anstelle von browserify verwenden?

Antwort

0

Hier ist, wie ich es gelöst:

Ich habe gelernt, dass man Standalone-Bundles mit browserify erstellen können, also habe ich alle Server-Code kompiliert I (Komponenten + Rendering) als Standalone-Paket benötigen. Dann habe ich ein kleines Node-Skript erstellt, das nur für das Lesen von Argumenten, das Laden von Daten und das Senden an den Rendering-Code zuständig ist.

Ich bin mir nicht sicher, ob dies ein richtiger Weg ist, wie es getan werden sollte, aber es funktioniert.

Hier Code für den „setup“ Skript:

var fs = require('fs'); 
var Server = require('./server.js'); 

if (process.argv[2]) { 
    region = process.argv[2].toLowerCase().replace(/[^a-z0-9]/, ''); 

    if (region != '') { 
     var data = JSON.parse(fs.readFileSync(__dirname + '/../tmp/' + region + '.json', 'utf8')); 

     console.log(Server.render(data.deal, data.region)); 
    } 
} 

Auf diese Weise brauche ich nur zwei Dateien bereitstellen und ich kann immer noch leicht jsx kompilieren js.

0

Wenn Sie ein React-Modul für es5 auf dem Server kompilieren müssen, verwenden Sie Babel selbst.

Ein Modul, das mit dem Lesen und Schreiben von Dateien ist dies eine helfen kann: https://nodejs.org/api/fs.html

Haben Sie darüber nachgedacht Posting und immer aus einer Datenbank?

+0

Ich dachte db, aber da es mehr Dinge gibt, die ich tun muss (zB die Region des Benutzers erraten), und ich mache es bereits in PHP, möchte ich diese Logik nicht an zwei Stellen haben (und ich nicht Ich möchte auch nicht zu Node wechseln. Mit Babel, kann ich die Regel schreiben, so dass es alle Dateien zusammen wie browserify bündeln würde? – tomas3333

Verwandte Themen