React Isomorphic设置和Node ES6语法问题

时间:2015-03-21 17:58:43

标签: node.js reactjs

我在这里提到了两个问题,这两个问题将在本文末尾。

=================>>> 背景<<< =================

我试图测试反应同构的方式,我设置了server.js并安装了以下节点模块

我的节点版本节点:' 0.12.0'

"babel": "^4.7.16",
"babel-core": "^4.7.16",
"babel-loader": "^4.2.0",
"babel-runtime": "^4.7.16",
"node-jsx": "^0.12.4",

以下是我的server.js(部分)

require("babel/register")({experimental: true});
require('node-jsx').install({extension:'.jsx'});

var express = require('express');
var server = express();
var port = process.env.PORT || 3000;

var React = require('react');
var EntryPointComponent = React.createFactory(require('./router.jsx'));

server.use(function(req, res, next) {
    var component = EntryPointComponent();
    var html = React.renderToString(component);
    res.send(html);
});

server.listen(port);

以下是示例routes.jsx(部分,它将包含在router.jsx中)

var React  = require('react'),
    Router = require('react-router'),
    {Route, NotFoundRoute} = Router,
    App = require('./app'),
    DefaultHandler = require('./pages/test');

module.exports = (
  <Route handler={App}>
    <Route name="test" handler={DefaultHandler} path="/test" addHandlerKey={true} />
    <NotFoundRoute handler={DefaultHandler} />
  </Route>
)

以下是router.jsx

var React  = require('react'),
    Router = require('react-router'),
    routes = require('./routes');


Router.run(routes, function(Handler) {
    React.render(<Handler/>, document.getElementById("content"));
});

=================&GT;&GT;&GT; 问题&lt;&lt;&lt; =================

当我尝试运行以下命令时

node server.js --harmony

它会引发我意想不到的令牌问题

/blah/blah/blah/routes.jsx:3
    {Route, NotFoundRoute} = Router,
    ^
SyntaxError: Unexpected token {

=================&GT;&GT;&GT; 问题&lt;&lt;&lt; =================

  1. 看起来Node没有识别出ES6语法,我尝试包含&#34; babel&#34;,我是否正确使用它?或者如何让Node了解ES6语法?

  2. 以上是设置同构反应应用程序的正确方法吗?或者以同构方式设置反应应用程序的正确/推荐方法是什么?

  3. 感谢任何建议。

2 个答案:

答案 0 :(得分:3)

你是否已超越&#39;使用&#39; node-jsx&#39;进行babel加载程序。 Docs

//"there can be only one!" :)
require("babel/register")({experimental: true});

//to be removed
//require('node-jsx').install({extension:'.jsx'});

答案 1 :(得分:-3)

Node.js和io.js都不支持ES6解构分配。