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

Posted

技术标签:

【中文标题】在 Nrwl/Nx 工作区中包含一些库的包【英文标题】:Include a package for some libs in Nrwl/Nx workspace 【发布时间】:2019-03-16 15:02:07 【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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

它不会影响已编译代码的大小,因为由于 webpack 捆绑和树抖动,应用程序只会包含它使用的代码。因此,对于不使用它的应用程序,D3 不会出现在捆绑包中。实际上,您可以在 package.json 中列出每个 npm 包,这不会影响您的包大小。

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

【讨论】:

谢谢。我通过将 D3 添加到 package.json 对此进行了测试,发现 dist 文件夹的大小没有增加。然后我在我的一个延迟加载的库中使用了它,似乎只有 dist 文件夹中那个库的大小增加了,这很棒。再次感谢您的澄清。 我会争辩。单个 package.json 有显着的缺点: 1. 当你有多个不同平台的应用程序时,它会急剧增长,因此很难管理这些依赖关系。我有单独的 Angular Web 应用程序和 Ionic 移动应用程序。对于移动应用程序,我需要其他任何地方都不需要的特定于离子的依赖项。如果我随后需要重构,甚至删除其中一个应用程序,那么检测它所依赖的 package.json 中的哪些依赖项是很痛苦的。 2.它使部署过程复杂化。当服务器运行“yarn install”时,它会加载大量实际构建目标不需要的依赖项

以上是关于在 Nrwl/Nx 工作区中包含一些库的包的主要内容,如果未能解决你的问题,请参考以下文章

为啥 nrwl/nx 比 angular@6 vanilia 更好?

设置 nrwl/nx 工作区,带有角通用,cypress 打字问题

Nrwl Nx 构建节点项目仅转译 main.ts

Nrwl Nx build for production 缺少节点模块包

Nrwl Nx 生成服务而不是 lib?

nrwl/nx 原理图创建 Angular 应用程序并配置 Angular json