Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用React SSR更新和配置babel_Reactjs_Server Side Rendering - Fatal编程技术网

Reactjs 使用React SSR更新和配置babel

Reactjs 使用React SSR更新和配置babel,reactjs,server-side-rendering,Reactjs,Server Side Rendering,好的,所以我尝试用React(v15.2)更新一个相当旧的身份验证代码库,用SSR和Webpack(v1.12)更新React路由器(v.2.3)。我很久以前就得到了代码库 我几乎已经完成了大部分工作。我已将React更新为16x,RR更新为3.2,Wepback更新为3.5。然而,我的后端server.js中有一些代码,我似乎无法完全纠正。我认为,因为后端正在使用ES6语法提取一些React代码,后端(节点)无法理解,因为我没有为更新版本正确设置网页包 因此,我在server.js中为后端编写

好的,所以我尝试用React(v15.2)更新一个相当旧的身份验证代码库,用SSR和Webpack(v1.12)更新React路由器(v.2.3)。我很久以前就得到了代码库

我几乎已经完成了大部分工作。我已将React更新为16x,RR更新为3.2,Wepback更新为3.5。然而,我的后端server.js中有一些代码,我似乎无法完全纠正。我认为,因为后端正在使用ES6语法提取一些React代码,后端(节点)无法理解,因为我没有为更新版本正确设置网页包

因此,我在server.js中为后端编写了这段代码。它涉及用于SSR的React和React路由器

// React and Server-Side Rendering
const routes = require('./src/routes');
const configureStore = require('./src/store/configureStore').default;

const app = express();



... for brevity




// React server rendering
app.use((req, res) => {
  let initialState = {
    auth: { token: req.cookies.token, user: req.user },
    messages: {}
  };

  const store = configureStore(initialState);

  Router.match({ routes: routes.default(store), location: req.url }, (err, redirectLocation, renderProps) => {
    if (err) {
      res.status(500).send(err.message);
    } else if (redirectLocation) {
      res.status(302).redirect(redirectLocation.pathname + redirectLocation.search);
    } else if (renderProps) {
      var html = ReactDOMServer.renderToString(React.createElement(Provider, { store: store },
        React.createElement(Router.RouterContext, renderProps)
      ));
      res.render('layouts/main', {
        html: html,
        initialState: store.getState()
      });
    } else {
      res.sendStatus(404);
    }
  });
});
当我运行nodemon服务器时,该代码导致了此错误

/home/david/tutorials/react/mgbp/mgbp-default-refactored/src/routes.js:9
import React from 'react';
^^^^^^

SyntaxError: Unexpected token import
/src/routes.js
是我的React routes文件,它使用import语句而不是后端的commonjs
require(“”)
语句

但是,当我运行webpack命令来构建客户机和服务器时,它们编译正确,没有错误


我怎样才能解决这个问题?如何将Babel设置到SSR代码的工作位置?

1)为什么寄存器被注释掉,2)要将
导入
导出
转换为commonjs,您需要编写Babel插件或预设,如
env
,或者您的源代码和寄存器不能在同一个文件中,您需要像这样编译源代码:不使用常规节点,您可以使用babel节点,这样它就可以处理es6语法