为本地开发和 CI 设置私有 npm 注册表身份验证的最佳做法是什么?
What's the best practice to setup private npm registry authentication for local development and CI?
我想知道是否有一般的最佳实践来为本地开发设置私有 npm 注册表身份验证,该实践也适用于 CI(反之亦然)。
这是我目前的理解:
对于本地开发: 运行 npm login
这将创建一个访问令牌,创建一个 ~/.npmrc
文件,并写入访问令牌到该文件如下:
@my-scope:registry=https://registry.npmjs.org/
//registry.npmjs.org/:_authToken=my-auth-token
在我的项目中,我有这个 .npmrc
文件(在 package.json
旁边):
@my-scope:registry=https://registry.npmjs.org/
//registry.npmjs.org/:always-auth=true
这似乎很有效。我可以安装我的私人包,因为 npm 似乎为注册表选择了用户级身份验证设置。
For CI: The NPM docs 建议在项目级别添加以下内容 .npmrc
以在 CI 中注入身份验证:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
不幸的是,这会覆盖我机器上的用户级配置。 .npmrc
个文件有 the following precedence(从高到低):项目级、用户级、全局、npm 内置。 npm CLI 现在尝试使用 NPM_TOKEN 环境变量进行身份验证,除非我在本地计算机上明确导出它,否则这显然不起作用。
也许我遗漏了一些明显的东西。如果没有,我很好奇是否有任何通用的最佳实践来处理这个问题?当访问令牌已经在用户级别配置时,要求每个员工在他们的机器上导出访问令牌 .npmrc
似乎不是一个很好的解决方案。
或者,可以简单地不理会用户级配置(或 npm 登录),直接在每位员工的本地计算机上将访问令牌导出为 NPM_TOKEN。但是就像提到的那样,我认为这不是一个很好的解决方案。我想象一个标准解决方案(如用户级配置文件),每个员工都可以在其中设置公司的私有注册表。
您可以保留适用于开发的 .npmrc
并通过将其覆盖为 运行 的一部分来在 CI 中猴子修补它:
// your-ci.yaml
steps:
- env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc
npm install
我想知道是否有一般的最佳实践来为本地开发设置私有 npm 注册表身份验证,该实践也适用于 CI(反之亦然)。
这是我目前的理解:
对于本地开发: 运行 npm login
这将创建一个访问令牌,创建一个 ~/.npmrc
文件,并写入访问令牌到该文件如下:
@my-scope:registry=https://registry.npmjs.org/
//registry.npmjs.org/:_authToken=my-auth-token
在我的项目中,我有这个 .npmrc
文件(在 package.json
旁边):
@my-scope:registry=https://registry.npmjs.org/
//registry.npmjs.org/:always-auth=true
这似乎很有效。我可以安装我的私人包,因为 npm 似乎为注册表选择了用户级身份验证设置。
For CI: The NPM docs 建议在项目级别添加以下内容 .npmrc
以在 CI 中注入身份验证:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
不幸的是,这会覆盖我机器上的用户级配置。 .npmrc
个文件有 the following precedence(从高到低):项目级、用户级、全局、npm 内置。 npm CLI 现在尝试使用 NPM_TOKEN 环境变量进行身份验证,除非我在本地计算机上明确导出它,否则这显然不起作用。
也许我遗漏了一些明显的东西。如果没有,我很好奇是否有任何通用的最佳实践来处理这个问题?当访问令牌已经在用户级别配置时,要求每个员工在他们的机器上导出访问令牌 .npmrc
似乎不是一个很好的解决方案。
或者,可以简单地不理会用户级配置(或 npm 登录),直接在每位员工的本地计算机上将访问令牌导出为 NPM_TOKEN。但是就像提到的那样,我认为这不是一个很好的解决方案。我想象一个标准解决方案(如用户级配置文件),每个员工都可以在其中设置公司的私有注册表。
您可以保留适用于开发的 .npmrc
并通过将其覆盖为 运行 的一部分来在 CI 中猴子修补它:
// your-ci.yaml
steps:
- env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc
npm install