动态导入不适用于组合CRA和SSR

时间:2018-04-19 10:00:22

标签: javascript reactjs babeljs create-react-app

我用create-react-app创建了一个网站,现在因为seo而想要使用服务器端渲染。

经过长时间的研究,我发现了一个简单的工具here

它工作正常,但在我的代码中,我有一个动态导入await import("localization/" + newLanguage + "/" + newLanguage + ".json");,因此我收到SyntaxError: Unexpected token import错误。

我也尝试过使用System.import。这适用于SSR,但CRA说'System.import' is restricted from being used. Please use import() instead.

我该如何解决这个问题?我不想弹出或类似,并且保持轻松。

我的index.js:

require('ignore-styles');
require('babel-register')({
  ignore: /\/(build|node_modules)\//,
  presets: ['env','react-app'],
  plugins: ["syntax-dynamic-import"]
});

require('./server');

这是我的服务器文件:

import express from 'express';
import http from 'http';
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import { StaticRouter } from "react-router";
import App from "./src/App";

const port = 3000;
const app = express();
const server = http.createServer(app);

app.use((req, res) => {

    const context = {}
    const html = ReactDOMServer.renderToString(
        <StaticRouter location={req.url} context={context}>
            <App />
        </StaticRouter>
    );

    if(context.url){
        res.status(302).redirect(context.url);
        return;
    }

    res.status(200).send(html);
});

server.listen(port, function(){
    console.log('Node server running on port ' + port + '.');
    console.log("Time: " + new Date(Date.now()));
});

1 个答案:

答案 0 :(得分:1)

确定。我知道了。

我使用了babel的syntax-dynamic-import插件。来自airbnb的dynamic-import-node可行。