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

How to compile ReactJS for use on server with command line arguments?

我决定试用 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?

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

一个可以帮助读写文件的模块是这个:https://nodejs.org/api/fs.html

您是否考虑过从数据库中发布和获取信息?

我是这样解决的:

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

我不确定这是否是正确的方法,但它确实有效。

这是 "setup" 脚本的代码:

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