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

时间:2019-07-15 18:25:40

标签: npm

我有一个包含$PROJECT/.npmrc的项目,该项目具有一个auth令牌,该令牌授予对该项目所需的proviat仓库的只读访问权限:

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

如何使用用户令牌覆盖该令牌,以便发布程序包?

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

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

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

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

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

但这意味着项目的每个用户都需要定义NPM_TOKEN环境变量,这是不希望的(即,因为这意味着每个用户(包括只读用户)都需要定义{ {1}}环境变量,然后他们才能使用该项目。

3 个答案:

答案 0 :(得分:0)

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

class Block extends Component {
  constructor(props) {
    super(props);

    this.state = {
      width: this.props.width,
      height: this.props.height,
      selected: false
      // etc...
    }
  }
  handleOnClick() {
    this.setState({
      selected: true
    });

    // But how do I update this in App?
  }
  render() {
    return (
      <div className="block" onClick={() => this.handleOnClick()}></div>
    )
  }
}

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

Block

答案 1 :(得分:0)

刚刚找到了解决方案。

编辑您的Expo: 37.0.3 expo-ads-admob: 8.1.0 react: 16.9.0 react-native: 0.61.4 文件:

.npmrc

每次要发布(powershell):

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

答案 2 :(得分:0)

显然文档已更改,并且在 npm publish 上无法通过 CLI 设置身份验证令牌,因此我提供了更多使用 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。它包括我们公司注册处的READ ONLY令牌:

# 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>