【问题标题】:Can react-loadable be used in create-react-app server-side?可以在 create-react-app 服务器端使用 react-loadable 吗?
【发布时间】:2018-04-21 09:47:02
【问题描述】:

我正在尝试在我的 create-react-app 应用程序中进行一些代码拆分,该应用程序利用服务器端呈现。

我正在使用 'react-loadable` 进行代码拆分:https://github.com/thejameskyle/react-loadable

到目前为止,我只是将我的 Home.js 组件与我的应用程序的其余部分分开,只是为了看看它是否有效。在开发模式下(阅读:不是 SSR),它被分块并且工作正常。

但是,我无法在服务器上运行。我正在按照他们的 Github 页面上的指南进行操作,但由于需要进行 webpack 更改而被卡住了。在create-react-app 应用程序中,您无法访问 webpack,因为它被隐藏了。

我在启动服务器时收到的错误是:

return (0, _importInspector.report)(import('../components/home/Home'), {
                                                ^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10) ...

我很确定这是因为我没有按照指南中的说明正确配置 webpack。

在指南中,它明确说明了 SSR:

首先,我们需要 Webpack 告诉我们每个模块存在于哪些包中。为此,有 React Loadable Webpack 插件。

从 react-loadable/webpack 导入 ReactLoadablePlugin 并将其包含在您的 webpack 配置中。向它传递一个文件名,用于存储有关我们的包的 JSON 数据的位置。

// webpack.config.js
import { ReactLoadablePlugin } from 'react-loadable/webpack';

export default {
    plugins: [
        new ReactLoadablePlugin({
            filename: './dist/react-loadable.json',
        }),
    ],
};

如果不弹出,我认为这是不可能的。 有人知道react-loadable 是否可以在create-react-app 服务器端渲染的应用程序中使用吗?

【问题讨论】:

    标签: reactjs create-react-app server-side-rendering react-loadable


    【解决方案1】:

    在服务器文件的顶部导入这些模块

    require('ignore-styles');
    require('babel-polyfill')
    require('babel-register')({
        ignore: [ /(node_modules)/ ],
        presets: ['es2015', 'react-app'],
        plugins: [
            'syntax-dynamic-import',
            'dynamic-import-node',
            'react-loadable/babel'
        ]
    });
    

    【讨论】:

    • 不错!问题是“动态导入节点”将使 import() 在服务器上工作,但会取消浏览器的代码拆分。所以我们只需要为服务器启用它(不要将它添加到.babelrc),这是一个完美的地方。这个答案应该被接受。
    • 我有同样的问题,但我使用的是可加载/组件,我觉得由于性能问题它没有正确拆分。
    猜你喜欢
    • 2018-01-30
    • 2019-05-30
    • 2023-03-28
    • 2018-07-16
    • 2020-12-23
    • 2018-02-02
    • 2017-09-14
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多