gpt4 book ai didi

javascript - 如何在单个存储库中与其他团队共享本地 npm 包?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:35 25 4
gpt4 key购买 nike

场景

考虑以下文件夹结构:

/my-service
/src
/bin
/other-package
/src
package.json
package.json

有 2 个 npm 包:一个用于 my-service,另一个用于 other-package

my-service 依赖于other-package

my-service 由团队 A 所有,other-package 由团队 B 所有。

请记住,当 other-package 更改时,团队 B 仍需要部署 my-service。这就是我们考虑使用共享存储库的原因。

问题

如何构建这种依赖关系,以使两个团队的开发人员体验都合理?

理想情况下,团队B只需要安装和构建other-package,并且可以在该目录中执行他们需要执行的所有操作。

同样,团队 A 应该能够在本地开发中以最小的摩擦使用最新版本的 other-package

选项

我目前正在考虑两种选择来解决这个问题,但不知道是否有更好的选择。

本地文件依赖

在此选项中,my-service 有一个 package.json,如下所示:

  "dependencies": {
"other-package": "./other-package"
},
"scripts": {
"build": "npm run build:other-package && npm run build",
"build:other-package": "cd other-package && npm i && npm run build && cd .."
}

本地 tarball 依赖项

在此选项中,my-service 有一个 package.json,如下所示:

  "dependencies": {
"other-package": "./other-package/other-package-0.0.1.tgz"
}

在这种情况下,团队B需要负责在新版本准备好时在other-package目录中运行npm pack,更新my-service中的package.json并将其提交到git。

最佳答案

将两个包放入单独的存储库中,并在第一个包的 package.json 文件中添加对第二个包的 git 存储库的依赖项。这看起来如下所示:

"dependencies": {
"my-other-package": "git://github.com/user/project.git#commit-ish"
}

有关可用语法选项的详细信息,请参阅 npm documentation .

这样两个团队就可以单独处理他们的包,并且彼此独立。同时,可以通过 git url 引用包,甚至可以通过提供其 commit-ish 来固定特定分支、标签或提交。

如果您使用 GitHub 来管理 git 存储库,您还可以使用快捷语法:

"dependencies": {
"my-other-package": "user/project#commit-ish"
}

这也适用于私有(private)存储库,但仅适用于 GitHub。如果是其他 git 托管解决方案,您需要使用上面提到的语法。

既然您提到依赖团队希望使用最新版本而不会有太多摩擦,您可能只想使用诸如 #master 之类的东西作为提交。然后,在每个 npm install 上,您都会获得提交到 master 分支的最新版本。

请注意,这会导致不可重现的构建,因为您无法确定地预测将安装什么。根据我的个人经验,我宁愿建议将您的依赖项固定到特定的提交。虽然这需要更多的维护工作,但它会带来可重复和可预测的安装,恕我直言,这很有值(value),但是YMMV。

这种方法的一大优点是,两个团队不必在发布或类似的事情上互相关心,因为您可以从外部依赖包,而管理包的团队甚至不知道其他人正在使用它。

如果,无论出于何种原因,它绝对必须是单个存储库,并且您不能使用我描述的方法,您可能会对术语“monorepo”感兴趣。这基本上是为多个包使用单个(单一)存储库的概念。管理此类单一存储库的一个工具是 Lerna ,您可能想仔细看看它。

关于javascript - 如何在单个存储库中与其他团队共享本地 npm 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com