如何使用私有 git repo 作为 npm 模块设置 repo 设置你的项目使用包将 repo 安装为模块更新结论

2025-06-05

如何将私有 git repo 用作 npm 模块

设置 repo

设置你的项目

使用包

将 repo 安装为模块

更新

结论

您可能希望使用私有 git repo 作为 npm 模块的原因有很多,但我认为最重要的是您希望共享一些高度机密的业务逻辑代码,并且由于某种原因,您不能使用私有 npm 注册表。

好吧,你很幸运,你可以这样做。

设置 repo

在本文中,我将使用 bitbucket 作为示例,因为 GitHub 相当简单。因此,请使用 bitbucket 或您选择的 git 提供商创建一个新项目。

设置你的项目

首先,你需要一个至少包含 package.json 文件的项目。如果没有该文件,项目将不会被识别为有效的包,并且 npm install 也无法正常工作。你可以使用 npm 命令快速完成设置。

npm init

上面的命令将引导您完成设置新项目的步骤。输入所需的所有信息,包括 repo URL。

注意:设置项目后,您应该在 package.json 文件中添加private: true以确保项目不会被错误发布。

现在编写您的代码并将您的项目推送到 git repo。

使用包

如果这是一个公开的仓库,你应该已经完成​​了。但不幸的是,它不是,接下来还有更多步骤。

SSH

还有其他身份验证方法可用于验证你的 Git 提供商是否能够访问仓库。你可以使用 HTTP 协议,并在 URL 中包含你的用户名和密码,或者生成一个密钥作为 URL 的一部分。这两种方法都非常不安全,因为你的凭证会被公开。

因此,最安全的方法是使用 SSH 进行身份验证。生成 SSH 密钥不在本教程的讨论范围内,但您可以查看本教程

https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html#SetupanSSHkey-ssh2

生成 ssh 密钥后,请使用您能记住的名称保存在方便记住的位置。我建议您不要使用密码创建密钥,但这完全取决于您。

在你的 ssh 目录中创建一个 ssh 配置文件。文件名就是 config,内容如下:


Host bitbucket.org
Preferredauthentications publickey
IdentityFile ~/.ssh/bitbucket

获取公钥并将其保存到 Bitbucket 作为新的 SSH 密钥。建议您使用一个能够区分密钥的名称,以便了解其用途。我的情况是,我为不同的环境设置了不同的密钥。因此,我使用了“keyname-environment”格式,例如 Payment-server-staging。

将 repo 安装为模块

获取你之前设置的仓库的 ssh URL。通常格式如下

git@bitbucket.org :acmeinc/foo-bar.git

使用安装npm i git@bitbucket.org:acmeinc/foo-bar.git

如果 SSH 设置顺利,并且您成功将密钥添加到 bitbucket,则安装应该会顺利进行。

奖励:与 Docker 一起使用

在我的用例中,我需要在容器中使用此仓库。虽然有几种方法可以实现这一点,但我需要一种不会将密钥作为 Docker 层的一部分进行复制的方法。

按照以下方式修改你的 Dockerfile:

`
来自节点:10-alpine

参数 SSH_KEY

运行 apk 添加 git OpenSSH 客户端

复制 package.json package-lock.json ./

运行 mkdir -p -m 0600 ~/.ssh && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts

运行 ssh-agent sh -c'echo $SSH_KEY | base64 -d | ssh-add -; npm
install'`

上面的 Dockerfile 告诉 docker 在构建时期望一个 base64 字符串,并将其读取到名为 SSH_KEY 的变量中,我们在 Dockerfile 的最后一行使用该变量。

要获取密钥的 base64 版本,您可以手动转换它或使用以下命令。

key=$(echo ~/.ssh/bitbucket | base64)

上述命令将把密钥以 base64 形式复制到变量 $key 中,现在您可以运行 Dockerfile,但运行它的命令稍有变化

docker build --build-arg SSH_KEY=$key -t private-git .

就是这样。

更新

这部分有点棘手,我刚开始用这个方法的时候,更新遇到了一些问题。为了升级,最好使用版本号(最好是语义版本号)为仓库创建一个标签。

创建标签后,您可以像这样添加标签名称

“some-app”:“git+ssh://git@bitbucket.org : acmeinc/foo-bar.git#TAG_NAME”

这将安装标签号对应的版本。这也是一个非常好的做法,因为您可以回退到旧版本。

结论

就这样吧,虽然有点长,但我觉得值得一看。继续写你的函数,分享给同事或跨项目吧。干杯!

文章来源:https://dev.to/gate3/how-to-use-a-private-git-repo-as-an-npm-module-2cl9
PREV
表达:req.params、req.query 和 req.body
NEXT
JavaScript 中的 25 种数组方法