Reactjs 使用React SSR更新和配置babel
好的,所以我尝试用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路由器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 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语句而不是后端的commonjsrequire(“”)
语句
但是,当我运行webpack命令来构建客户机和服务器时,它们编译正确,没有错误
我怎样才能解决这个问题?如何将Babel设置到SSR代码的工作位置?1)为什么寄存器被注释掉,2)要将
导入和导出转换为commonjs,您需要编写Babel插件或预设,如env
,或者您的源代码和寄存器不能在同一个文件中,您需要像这样编译源代码:不使用常规节点,您可以使用babel节点,这样它就可以处理es6语法