使用用户身份验证令牌覆盖 npm 项目身份验证令牌?

Dav*_*ver 5 npm

我有一个项目,其中包含$PROJECT/.npmrc一个身份验证令牌,该令牌授予对该项目所需的 proviat 存储库的只读访问权限:

$ cat .npmrc
//registry.npmjs.org/:_authToken={read-only-token}
Run Code Online (Sandbox Code Playgroud)

如何使用我的用户令牌覆盖该令牌以便我可以发布包?

$ cat ~/.npmrc
//registry.npmjs.org/:_authToken={my-token}
Run Code Online (Sandbox Code Playgroud)

文档指出配置文件将按“优先级顺序”加载,其中项目配置具有最高优先级,并且似乎没有任何方法可以覆盖它:

$ cd my-project/
$ npm whoami
project-readonly-user
$ cd ~
$ npm whoami
wolever
Run Code Online (Sandbox Code Playgroud)

我知道可以定义一个NPM_TOKEN环境变量:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Run Code Online (Sandbox Code Playgroud)

但这意味着项目的每个用户都需要定义NPM_TOKEN环境变量,这是不可取的(即,因为这意味着每个用户(包括只读用户)都需要定义环境NPM_TOKEN变量才能使用该项目) 。

Mar*_*nde 1

CLI 参数优先于本地 .npmrc 配置,因此您可以通过以下方式覆盖它:

npm publish --registry=https://registry.npmjs.org/:_authToken={my-token}
Run Code Online (Sandbox Code Playgroud)

您可以添加一个用于发布的 npm 脚本,该脚本依赖于带有私有令牌的环境变量:

{
  "scripts": {
    "publish": "npm publish --registry=https://registry.npmjs.org/:_authToken=${NPM_PUBLISH_TOKEN}"
  }
}
Run Code Online (Sandbox Code Playgroud)