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.