Debugging-Methode für die Webpack-Codeaufteilung mithilfe von React.lazy
P粉001206492
2023-08-29 16:07:28
<p>Ich verwende <code>React.lazy</code>, um zu versuchen, Code aus meiner Haupt-App aufzuteilen, aber es funktioniert nicht wie erwartet und es fällt mir schwer, herauszufinden, wie das geht Debuggen Sie es. </p>
<p>Mein Code sieht ungefähr wie folgt aus:</p>
<pre class="brush:php;toolbar:false;">// index.js
import React aus 'react';
import { LibraryUtils } aus './library/utils';
const Component = React.lazy(() => import('./component'));
...
// Komponente.js
import React aus 'react';
importiere LibraryComponent aus './library/component';
...</pre>
<p>Was ich will ist:</p>
<ul>
<li>vendors.chunk.js:react</li>
<li>main.chunk.js:index.js</li>
<li>main-1.chunk.js:component.js</li>
<li>library-0.chunk.js:library/utils</li>
<li>library-1.chunk.js:library/component</li>
<li>index.html: main.chunk.js, Library-0.chunk.js, Vendors.chunk.js</li>
<li>Asynchrone Chunks: main-1.chunk.js, Library-1.chunk.js</li>
</ul>
<p>Was ich bekomme, ist: </p>
<ul>
<li>vendors.chunk.js:react</li>
<li>main.chunk.js:index.js + Component.js</li>
<li>library.chunk.js:library/utils +library/component</li>
<li>index.html: main.chunk.js, Library.chunk.js, Vendors.chunk.js</li>
<li>Asynchrone Blöcke: Keine</li>
</ul>
<p>Aus diesem Grund muss beim ersten Laden meiner Seite das gesamte JS geladen werden, was zu einer schlechten Leistung führt. </p>
<p>Wie erzwinge ich, dass das Webpack die <code>library</code> in mehrere Blöcke aufteilt, damit ich die Vorteile asynchroner Blöcke nutzen kann? Besser noch: Wie behebe ich ein Problem wie dieses? </p>
<p>Meine Konfiguration sieht ungefähr wie folgt aus:</p>
<pre class="brush:php;toolbar:false;">splitChunks: {
chunks: 'alle',
CacheGruppen: {
Bibliothek: {
test: /[\/]library[\/]/,
},
},
}</pre></p>
问题是意外包含了
babel-plugin-dynamic-import-node
,它将动态导入(用于异步加载)转换为节点环境中的常规require,从而阻止生成任何异步块。解决方案是删除它(或仅在运行单元测试时包含它)。