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
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
There are two ways to solve this problem:
publishConfig option in package.json:"publishConfig": {
"registry":"https://npm.pkg.github.com/@OWNER"
},
.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.
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:
package.json contains simple package name without scope as often is the case when publishing public packages to https://www.npmjs.com/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
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.