我正在尝试模仿Webpack 4中react-universal-component的效果。
TL;DR - 我想要一种在 SSR HTML 渲染中转储<link>
和标记的方法,其中包含客户端在任何给定路由上请求的所有CSS/JS 块,而服务器则同步加载。<script>
使用react-loadable,一个典型的异步 React 组件在服务器和客户端包中都是这样的:
const Logo = loadable({
loader: () => import("./logo/logo"),
loading: () => <div>Loading...</div>,
modules: ["./logo/logo"],
webpack: () => [(require as any).resolveWeak("./logo/logo")],
});
在服务器上,我<Loadable.Capture>
用来获取用于渲染路由的模块名称:
// Modules used to render this route
const modules: string[] = [];
// Generate the HTML from our React tree.
const components = (
<Loadable.Capture report={moduleName => modules.push(moduleName)}>
<StaticRouter location={ctx.request.url} context={routeContext}>
<Root />
</StaticRouter>
</Loadable.Capture>
);
哪个工作正常 -modules
路线/logo
包含:
['./logo/logo']
我现在需要做的是以某种方式./logo/logo
在 Webpack stats 中找到(在我的服务器环境中作为传递给中间件的变量或作为 Webpack 生成的静态 JSON 文件可用)并将其与生成的块相关联调用返回的模块 ID require.resolveWeak()
...或(最好)直接在./logo/logo
导入名称上。
这就是我卡住的地方。上面提到的“通用组件”NPM 模块中没有一个与 Webpack 4 兼容,并且依赖于以前的 CommonChunksPlugin 的技术已经失效。
是否有任何使用 Webpack 统计信息以根据传递给的字符串查找相关块文件名的示例import()
?