Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';为本地开发和CI设置专用npm注册表身份验证的最佳做法是什么?_Npm_Npm Registry - Fatal编程技术网

什么';为本地开发和CI设置专用npm注册表身份验证的最佳做法是什么?

什么';为本地开发和CI设置专用npm注册表身份验证的最佳做法是什么?,npm,npm-registry,Npm,Npm Registry,我想知道是否有一个通用的最佳实践来为本地开发设置私有npm注册表身份验证,该身份验证也适用于CI(反之亦然) 以下是我目前的理解: 对于本地开发:运行将创建访问令牌的npm登录,创建~/.npmrc文件,并将访问令牌写入该文件,如下所示: @my-scope:registry=https://registry.npmjs.org/ //registry.npmjs.org/:_authToken=my-auth-token 在我的项目中,我有一个.npmrc文件(在包.json旁边): 这似乎

我想知道是否有一个通用的最佳实践来为本地开发设置私有npm注册表身份验证,该身份验证也适用于CI(反之亦然)

以下是我目前的理解:

对于本地开发:运行将创建访问令牌的
npm登录
,创建
~/.npmrc
文件,并将访问令牌写入该文件,如下所示:

@my-scope:registry=https://registry.npmjs.org/
//registry.npmjs.org/:_authToken=my-auth-token
在我的项目中,我有一个
.npmrc
文件(在
包.json
旁边):

这似乎很有效。我可以安装我的私有软件包,因为npm似乎为注册表选择了用户级身份验证设置

对于CI:建议将以下内容添加到项目级别
.npmrc
以在CI中插入身份验证:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}
不幸的是,这会覆盖我机器上的用户级配置
.npmrc
文件具有(从高到低):项目级、用户级、全局、npm内置。npm CLI现在尝试使用npm_令牌环境变量进行身份验证,该环境变量显然不起作用,除非我在本地计算机上显式导出它

也许我错过了一些明显的东西。如果没有,我很好奇是否有共同的最佳实践来处理这个问题?要求每位员工在其机器上导出访问令牌(当它已经在用户级别
中配置时)。npmrc
似乎不是一个很好的解决方案


或者,您也可以不必麻烦用户级配置(或npm登录),直接将访问令牌作为npm_令牌导出到每个员工的本地机器上。但正如前面提到的,我并不认为这是一个很好的解决方案。我设想一个标准解决方案(如用户级配置文件),每个员工都可以在其中设置公司的私有注册表。

您可以保留用于开发的
.npmrc
,并通过在运行过程中覆盖它来在CI中对其进行修补:

//your-ci.yaml
步骤:
-环境:
NPM_令牌:${{secrets.NPM_令牌}
-运行:|
echo//registry.npmjs.org/:_authToken=${NPM_TOKEN}>.npmrc
npm安装

我以前见过这个解决方案,但我觉得很奇怪。如果在CI中再次覆盖项目级配置,那么它有什么意义呢?我还不需要它。由于npm有自己的身份验证令牌存储空间,所以将它们移动到env变量中只是为了打包ci配置似乎很麻烦。
//registry.npmjs.org/:_authToken=${NPM_TOKEN}