使用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可能与我在上面看到的服务器错误有关,但提供的信息甚至更少。
我的.babelrc
已经在使用@babel/plugin-syntax-dynamic-import
,但是我尝试添加babel-plugin-dynamic-import-node
。这样可以解决服务器问题,但是Webpack不再构建块。
我一直无法找到一个确定的例子来解决这个问题。那里有关于正确设置的冲突信息。例如,react-loadable自述文件说使用包含的react-loadable/babel
插件,而lib作者的this post说使用babel-plugin-import-inspector
。 This PR似乎正在尝试解决Webpack 4的问题,但已关闭,并且分叉的lib也似乎也有问题。
我正在使用:
答案 0 :(得分:2)
我今天有完全一样的问题。将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" );
我希望这会有所帮助;)