如何使用命令行参数编译ReactJS以在服务器上使用?

时间:2016-04-14 02:41:38

标签: node.js reactjs gulp browserify react-jsx

我决定试用ReactJS。除此之外,我还决定使用Gulp将.jsx编译为.js,这也是第一次。

我可以编译它没有问题客户端使用browserify。这是我的gulp任务:

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

但是由于我使用PHP生成数据,我需要将这些数据传递给节点。如果我使用browserify,它将阻止我在节点中使用process.argv。我可以将数据保存到文件并在节点中读取该文件,因此我不需要将整个状态传递给节点,但我仍然需要传递标识参数,因此节点知道要加载哪个文件。

我应该使用什么而不是browserify?

2 个答案:

答案 0 :(得分:0)

如果您需要将React模块编译为es5以便在服务器上使用,请使用Babel本身。

可能有助于阅读和编写文件的模块是:https://nodejs.org/api/fs.html

您是否考虑过从数据库发帖和获取?

答案 1 :(得分:0)

以下是我如何解决它:

我了解到你可以使用browserify创建独立的bundle,所以我将所需的所有服务器代码(组件+渲染)编译为独立的bundle。然后我创建了一个小节点脚本,它只负责读取参数,加载数据并将其发送到渲染代码。

我不确定这是否应该如何完成但是有效。

以下是“设置”脚本的代码:

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

这样我只需要部署两个文件,我仍然可以轻松地将jsx编译为js。