我们最近一直在考虑将代码拆分到我们复杂的 Web 应用程序中,以减少主包的大小。我们关注的主要部分是使用 webpack 和 react-loadable 进行动态导入。
我遇到了一些我认为是相当大的问题,举个例子:
const FirstChild = Loadable({
loader: () => import('some/file/path/FirstChild.jsx')
});
const SecondChild = Loadable({
loader: () => import('some/file/path/SecondChild.jsx')
});
const ParentComponent = () => (
<div>
<FirstChild />
<SecondChild />
</div>
);
其中 FirstChild.jsx 和 SecondChild.jsx 都导入相同的服务:
import MyService from 'some/file/path/my.service.js';
当与 webpack 捆绑时,我们最终得到 3 个文件:
- 主包(包括父组件)
- FirstChild 捆绑包(包括
MyService
) - SecondChild 捆绑包(其中还包括
MyService
)
在这一点上,我看到了一个问题 - 我们MyService
在两个文件之间都有重复项。对于一些小型应用程序,这可能不是问题(或者如果服务只是帮助方法),但如果我们使用我们的服务在应用程序的整个生命周期内存储一些数据,我们最终会得到两个对象引用服务,因此完全违背了它的意义。
我知道这里的服务可以“顶级”移动ParentComponent
到每个组件,并可能作为道具传递给每个组件,但它似乎破坏了 webpack 首先拥有的架构 - 能够导入我们的任何东西需要我们需要的任何地方,它只创建一个参考。如果您有很多嵌套组件都需要导入各种服务和其他组件,这也可能会出现问题。
显然,这个例子很简单,但是将它实现到一个具有非常复杂架构的大型应用程序中可能会立即让我们遇到问题。
对此有什么想法吗?谢谢!