【问题标题】:Include a package for some libs in Nrwl/Nx workspace在 Nrwl/Nx 工作区中包含一些库的包
【发布时间】: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。

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

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

谢谢。

【问题讨论】:

    标签: angular monorepo nrwl


    【解决方案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”时,它会加载大量实际构建目标不需要的依赖项
    猜你喜欢
    • 2019-01-07
    • 2022-01-06
    • 2022-08-13
    • 2019-05-21
    • 2021-05-13
    • 2022-08-14
    • 2020-07-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多