如何将私有 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