Not Found - PUT https://npm.pkg.github.com/package-name

后端 未结 4 1006
慢半拍i
慢半拍i 2021-02-19 03:00

I\'m trying to upload a package on GPR (Github Package registry). I log in successfully:

npm login --registry=https://npm.pkg.github.com

and th

相关标签:
4条回答
  • 2021-02-19 03:51

    Github Package registry expected the name properties on package.json to be "@{github username}/{package name} for example:-

    "name": "@pravanjan/local-time",
    "publishConfig": { 
         "registry": "https://npm.pkg.github.com/" 
     },
    

    This did work for me

    0 讨论(0)
  • There are two ways to solve this problem:

    1. Specify publishConfig option in package.json:
    "publishConfig": {
        "registry":"https://npm.pkg.github.com/@OWNER"
    },
    
    1. Add .npmrc file to your project with this content:
    registry=https://npm.pkg.github.com/@OWNER
    

    replacing OWNER with the name of the user or organization account on GitHub that owns the repository where you will publish the package.

    0 讨论(0)
  • 2021-02-19 03:54

    As hinted by other answers here, the root cause of the above error is that GPR (unlike https://www.npmjs.com/) requires that packages have a scope.

    However, it seems that all other suggested solutions (updating package.json and etc.) would not allow to keep publishing the package to https://www.npmjs.com/ without a scope. Here's my solution that allows both:

    Assuming that:

    1. package.json contains simple package name without scope as often is the case when publishing public packages to https://www.npmjs.com/
    2. GitHub Workflow is configured using GitHub's Node.js Package template

    Add additional step to publish-gpr job before the run: npm ci default step in order to dynamically insert current repository's owner into package name in package.json:

    - name: Insert repository owner as scope into package name
      run: |
        node <<EOF
        const fs = require('fs').promises;
        fs.readFile('package.json', 'utf8').then((data) => JSON.parse(data)).then((json) => {
            json.name = '@$(echo "$GITHUB_REPOSITORY" | sed 's/\/.\+//')/' + json.name;
            console.info('Package name changed to %s', json.name);
            return fs.writeFile('package.json', JSON.stringify(json), 'utf8');
        }).catch(error => {
            console.error(error);
            process.exit(1);
        });
        EOF
    
    0 讨论(0)
  • 2021-02-19 04:02

    For example:

    {
      "name": "@elvisjs/calling-elvis",
      "repository": {
        "type": "git",
        "url": "https://github.com/elvisjs/calling-elvis"
      },
      "publishConfig": {
        "registry": "https://npm.pkg.github.com/elvisjs"
      }
    }
    

    The name, repository/url and the publishConfig/registry must be matched.

    0 讨论(0)
提交回复
热议问题