3

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

$ cat .npmrc
//registry.npmjs.org/:_authToken={read-only-token}

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

$ cat ~/.npmrc
//registry.npmjs.org/:_authToken={my-token}

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

$ cd my-project/
$ npm whoami
project-readonly-user
$ cd ~
$ npm whoami
wolever

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

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

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

4

3 回答 3

2

刚刚找到了解决办法。

编辑您的.npmrc文件:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

每次要发布(powershell)时:

$env:NPM_TOKEN="the-token"
npm publish --access public --registry https://registry.npmjs.org
于 2020-06-05T07:10:12.893 回答
1

显然,文档已经更改,并且在npm publish上不再可能通过 CLI 设置 auth 令牌,因此我提供了更多将 NPM 与 Github Actions + Font Awesome PRO + Github Package Registry 一起使用的解决方案:

name: Node.js Package
on:
    release:
        types: [created]
    workflow_dispatch:

jobs:
    publish:
        runs-on: ubuntu-latest
        permissions:
            contents: read
            packages: write
        steps:
            - name: Checkout 
              uses: actions/checkout@master

            - name: Setup node env 
              uses: actions/setup-node@v2
              with:
                  node-version: '14.x'
                  registry-url: 'https://npm.pkg.github.com'
                  scope: '@mindfuel'

            - name: Install Packages 
              run: npm ci
              env:
                  NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

            - name: Build 
              run: npm run build

            - name: Prepare NPM Config ‍♂️
              run: rm -f .npmrc

            - name: Setup publishing Env 
              uses: actions/setup-node@v2
              with:
                  node-version: '14.x'
                  registry-url: 'https://npm.pkg.github.com'
                  scope: '@mindfuel'

            - name: Publish Package 
              run: npm publish
              env:
                  NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

对我来说,诀窍是在删除现有的 .npmrc 后调用 setup-node。

我们有一个所有开发人员都使用的共享 .npmrc。它包括我们公司注册表的只读令牌:

# Font Awesome Pro Config
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=<your-token>

# Private Packages
@<github-username-or-org>:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=<the-read-only-token>

于 2021-06-28T13:38:46.740 回答
0

CLI 参数优先于本地 .npmrc 配置,因此您可以这样覆盖它:

npm publish --registry=https://registry.npmjs.org/:_authToken={my-token}

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

{
  "scripts": {
    "publish": "npm publish --registry=https://registry.npmjs.org/:_authToken=${NPM_PUBLISH_TOKEN}"
  }
}
于 2019-10-24T15:28:57.140 回答