【问题标题】:React-Loadable SSR with Webpack 4 and Babel 7使用 Webpack 4 和 Babel 7 的 React-Loadable SSR
【发布时间】:2018-10-08 04:52:03
【问题描述】:

react-loadable 的服务器端渲染是否适用于 Webpack 4 和 Babel 7?在关注the instructions 时,我一直无法让它成功运行。

在仅执行客户端步骤之后,Webpack 会为每个可加载组件正确输出单独的块,这会在我在浏览器中加载页面时反映出来(即:块是延迟加载的)。

但是,在完成所有 SSR 步骤后,服务器会抛出以下错误:

Error: Not supported
at loader (/Projects/test-project/web/routes/index.js:50:15)
at load (/Projects/test-project/web/node_modules/react-loadable/lib/index.js:28:17)
at init (/Projects/test-project/web/node_modules/react-loadable/lib/index.js:121:13)
at flushInitializers (/Projects/test-project//web/node_modules/react-loadable/lib/index.js:310:19)
at /Projects/test-project/web/node_modules/react-loadable/lib/index.js:322:5
at new Promise (<anonymous>)
at Function.Loadable.preloadAll (/Projects/test-project/web/node_modules/react-loadable/lib/index.js:321:10)
at Object.preloadAll (/Projects/test-project/web/server.js:15:10)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Module._compile (/Projects/test-project/web/node_modules/pirates/lib/index.js:83:24)

我的routes/index.js 文件:

import React from 'react';
import Loadable from 'react-loadable';

import Loading from '../components/Loading';

export default [
  {
    path: '/',
    component: Loadable({
      loader: () => import('./controllers/IndexController'),
      loading: Loading,
    }),
    exact: true,
  },
  {
    path: '/home',
    component: Loadable({
      loader: () => import('./controllers/HomeController'),
      loading: Loading,
    }),
    exact: true,
  },
  ...
];

This issue 在 SO 上可能与我在上面看到的服务器错误有关,但提供的信息更少。

我的.babelrc 已经在使用@babel/plugin-syntax-dynamic-import,但我尝试添加babel-plugin-dynamic-import-node。这修复了服务器问题,但 Webpack 不再构建块。

我一直无法找到一个明确的例子来让它发挥作用。那里有关于正确设置的相互矛盾的信息。例如,react-loadable README 说要使用包含的 react-loadable/babel 插件,而 lib 作者的 this post 说要使用 babel-plugin-import-inspectorThis PR 似乎正在尝试解决 Webpack 4 问题但已关闭,并且分叉的库似乎也有问题。

我正在使用:

  • 通天塔7
  • 节点 10.4
  • 反应 16.5
  • React-Loadable 5.5
  • Webpack 4

【问题讨论】:

    标签: node.js reactjs babeljs webpack-4 react-loadable


    【解决方案1】:

    我今天遇到了完全相同的问题。将dynamic-import-node 添加到我的.babelrc 的插件后,服务器工作了,但webpack 没有创建块。然后我再次将其从我的.babelrc 中删除,并使用@babel/register 将其移动到我的服务器脚本中。我的服务器脚本现在看起来像这样:

    require( "@babel/register" )({
        presets: ["@babel/preset-env", "@babel/preset-react"],
        plugins: ["dynamic-import-node"]
    });
    require( "./src/server" );
    

    我希望这会有所帮助;)

    【讨论】:

    • 我尝试切换到可加载组件,但遇到了类似的问题。这个解决方案奏效了!我有点惊讶更多人没有使用该库遇到这个问题,但也许我的配置有一些独特之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2018-02-02
    相关资源
    最近更新 更多