我想进行以下导入和代码:
import {HotTable} from '@handsontable/react';
import {registerAllModules} from 'handsontable/registry';
registerAllModules();
并将它们转换为使用React. lazy(),以便webpack为HandsOnTable库创建一个单独的bundle。
如果我这样做:
const HotTable = React.lazy(() => import('@handsontable/react'));
import {registerAllModules} from 'handsontable/registry';
registerAllModules();
代码仍将运行,但HandsOnTable仍在主包中。
如果我试着这样做:
const HotTable = React.lazy(() => import('@handsontable/react'));
React.lazy(
() => import('handsontable/registry').then((registerAllModules) => {
registerAllModules();
return { registeredModules: true };
})
);
webpack确实将库拆分到另一个包,但HandsOnTable包的加载失败,并出现内容解码错误:
main.90757321a1336791f3c9.bundle.js:2
GET http://localhost:5000/215.21bf19f9d6a7317b2ad5.bundle.js
net::ERR_CONTENT_DECODING_FAILED 200 (OK)
更新:这个问题似乎与compression-webpack-plugin有关。如果我禁用压缩,那么包含HandsonTable组件的页面将成功加载。
但我仍然需要去它的工作与压缩。
1条答案
按热度按时间mwg9r5ms1#
我发现这个问题与compression-webpack-plugin的配置有关:
其中一个包低于阈值大小(10240),因此未压缩。
在网络上的许多地方,您会看到以下代码建议Express服务器使用compression-webpack-plugin:
然而,这段代码并没有考虑到包可能没有被压缩的情况。我更新了这段代码,添加了一个条件,即当没有找到压缩文件时,提供一个非压缩文件:
错误就消失了。