npm - 为本地开发和 CI 设置私有 npm 注册表身份验证的最佳实践是什么?
问题描述
我想知道是否有一个通用的最佳实践来为本地开发设置私有 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 似乎选择了注册表的用户级身份验证设置。
对于 CI: NPM 文档建议将以下内容添加到项目级别.npmrc
以在 CI 中注入身份验证:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
不幸的是,这会覆盖我机器上的用户级配置。.npmrc
文件具有以下优先级(从高到低):项目级、用户级、全局、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
推荐阅读
- python - 删除日志文件后python记录丢失消息
- laravel - JSON/整数数组的 Laravel 验证不起作用
- questdb - 估计 QuestDB 的磁盘空间要求
- c# - 使用 HealthChecks 检查我的 Quartz 是否健康
- kotlin - Kotlin kmm 创建类型为:CValuesRef 的变量
- aggregate-functions - Qlikview 聚合
- sql - SQL中不同表访问两个不同字段时如何添加分隔符
- postgrest - PostgREST:禁用对除功能以外的所有内容的直接访问
- oracle - 带有减号运算符问题的 Oracle 查询
- javascript - 从flexform获取域时如何为cookie设置域