在 Nrwl/Nx 工作区中包含一些库的包

Esf*_*iar 14 monorepo angular nrwl

看起来 Nrwl/Nx 工作区中只有一个 package.json 文件。现在,如果我们有多个应用程序,每个应用程序都依赖于不同的包,那么我们必须将所有这些包包含在单个 package.json 文件中,这不会增加所有应用程序构建时的大小吗?(大概是vendor.js 文件)。

例如,如果 app-1 依赖于 d3 而 app-2 依赖于 ag-grid 库,那么这两个库是否会不必要地包含在 app-1 和 app-2 中?当 app-1 的用户访问该应用程序时,不需要为他们加载 ag-grid。

我的理解正确还是我遗漏了什么?如果我的假设是正确的,有没有办法解决这个问题?

延迟加载的库怎么样?例如,仅对某些用户(具有管理员角色)可用的“管理”库可能需要某些图形包,而不必为所有用户加载这些包。

谢谢。

mgm*_*m87 13

使用 nrwl/nx 的好处之一是单个 package.json 文件。使用单个 package.json 很棒,因为当您需要升级像 rxjs 这样的东西时,您只需执行一次,并且整个代码库都在同一组依赖项上运行。

它不会影响编译代码的大小,因为由于 webpack 捆绑和 tree shake,应用程序只会包含它使用的代码。因此,对于不使用 D3 的应用程序来说,不存在出现在捆绑包中的风险。实际上,您可以在 package.json 中列出每个 npm 包,并且它不会影响您的包大小。

nrwl/nx 100% 打算仅使用一个 package.json 文件。如果您使用 nx,请不要尝试分解它。

  • 我会争辩。单个 package.json 有显着的缺点: 1. 当您有针对不同平台的多个应用程序时,它会急剧增长,因此很难管理这些依赖项。我有单独的角度网络应用程序和离子移动应用程序。对于移动应用程序,我需要特定于离子的依赖项,而其他地方不需要这些依赖项。如果我随后需要重构,甚至删除其中一个应用程序,那么检测它依赖于 package.json 中的哪些依赖项是很痛苦的。2. 使部署过程变得复杂。当服务器运行“yarn install”时,它会加载实际构建目标不需要的大量依赖项 (7认同)