如何使用 CRA + 代码拆分避免块中的重复代码

sco*_*ots 6 webpack code-splitting create-react-app react-loadable

例如,假设我们有两个具有共同导入的组件:

...
        
import Hello from './Hello'
        
class A extends Component {}
Run Code Online (Sandbox Code Playgroud)

...
    
import Hello from './Hello'
    
class B extends Component {}
Run Code Online (Sandbox Code Playgroud)

然后这些组件会异步加载到另一个组件中,如下所示:

...
    
import Loadable from 'react-loadable'
    
const AsyncA = Loadable({
    loader: () => import(/* webpackChunkName: "A" */ "./A"),
    loading: () => <div>Generic Loading Message</div>
});

const AsyncB = Loadable({
    loader: () => import(/* webpackChunkName: "B" */ "./B"),
    loading: () => <div>Generic Loading Message</div>
});
Run Code Online (Sandbox Code Playgroud)

“A”和“B”块都将包含“Hello”代码,将重复的代码传送到浏览器。

在我的研究中,我确定如果在任何其他未异步加载的组件中导入“Hello”,则不会发生这种情况。在这种情况下,它被捆绑到“主”块中,而不是“A”和“B”块中。

虽然这是一种选择,但仍有很多不足之处。本指南演示了如何配置 webpack 以创建一个“通用”模块,这看起来很理想,因为它不需要任何代码重构即可达到预期效果。

但是,webpack 配置不受 CRA 限制。

这里有更好的解决方案吗?