未找到 - PUT https://npm.pkg.github.com/package-name
Not Found - PUT https://npm.pkg.github.com/package-name
我正在尝试在 GPR 上上传一个包(Github 包注册表)。我登录成功:
npm login --registry=https://npm.pkg.github.com
然后 运行 这些命令:
npm set registry https://npm.pkg.github.com/
npm publish
哪个returns这个错误:
npm ERR! 404 Not Found - PUT https://npm.pkg.github.com/package-name
npm ERR! 404
npm ERR! 404 'package-name@version' is not in the npm registry.
它似乎试图在 npm 注册表而不是 github 包注册表上载包。我该如何解决这个问题?
有两种方法可以解决这个问题:
- 在
package.json
中指定 publishConfig
选项:
"publishConfig": {
"registry":"https://npm.pkg.github.com/@OWNER"
},
- 将
.npmrc
文件添加到您的项目中,内容如下:
registry=https://npm.pkg.github.com/@OWNER
将 OWNER
替换为 GitHub 上拥有您将发布包的存储库的用户或组织帐户的名称。
例如:
{
"name": "@elvisjs/calling-elvis",
"repository": {
"type": "git",
"url": "https://github.com/elvisjs/calling-elvis"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/elvisjs"
}
}
必须匹配name
、repository/url
和publishConfig/registry
。
Github 软件包注册表期望 package.json 上的名称属性为“@{github 用户名}/{软件包名称}
例如:-
"name": "@pravanjan/local-time",
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
},
如果package.json中没有设置“publishConfig”我们可以直接在terminal中设置registry参数
npm publish --registry=https://npm.pkg.github.com/
这对我有用
正如此处其他答案所暗示的,上述错误的根本原因是 GPR(与 https://www.npmjs.com/ 不同)要求包具有作用域。
但是,似乎所有其他建议的解决方案(更新 package.json
等)都不允许在没有范围的情况下继续将包发布到 https://www.npmjs.com/。
这是我的解决方案,同时允许:
假设:
package.json
包含没有范围的简单包名称,将 public 包发布到 https://www.npmjs.com/ 时经常出现这种情况
- GitHub 工作流程使用 GitHub 的 Node.js 包 模板
配置
在 run: npm ci
默认步骤之前向 publish-gpr
作业添加额外的步骤,以便将当前存储库的所有者动态插入到 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
我正在尝试在 GPR 上上传一个包(Github 包注册表)。我登录成功:
npm login --registry=https://npm.pkg.github.com
然后 运行 这些命令:
npm set registry https://npm.pkg.github.com/
npm publish
哪个returns这个错误:
npm ERR! 404 Not Found - PUT https://npm.pkg.github.com/package-name
npm ERR! 404
npm ERR! 404 'package-name@version' is not in the npm registry.
它似乎试图在 npm 注册表而不是 github 包注册表上载包。我该如何解决这个问题?
有两种方法可以解决这个问题:
- 在
package.json
中指定publishConfig
选项:
"publishConfig": {
"registry":"https://npm.pkg.github.com/@OWNER"
},
- 将
.npmrc
文件添加到您的项目中,内容如下:
registry=https://npm.pkg.github.com/@OWNER
将 OWNER
替换为 GitHub 上拥有您将发布包的存储库的用户或组织帐户的名称。
例如:
{
"name": "@elvisjs/calling-elvis",
"repository": {
"type": "git",
"url": "https://github.com/elvisjs/calling-elvis"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/elvisjs"
}
}
必须匹配name
、repository/url
和publishConfig/registry
。
Github 软件包注册表期望 package.json 上的名称属性为“@{github 用户名}/{软件包名称} 例如:-
"name": "@pravanjan/local-time",
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
},
如果package.json中没有设置“publishConfig”我们可以直接在terminal中设置registry参数
npm publish --registry=https://npm.pkg.github.com/
这对我有用
正如此处其他答案所暗示的,上述错误的根本原因是 GPR(与 https://www.npmjs.com/ 不同)要求包具有作用域。
但是,似乎所有其他建议的解决方案(更新 package.json
等)都不允许在没有范围的情况下继续将包发布到 https://www.npmjs.com/。
这是我的解决方案,同时允许:
假设:
package.json
包含没有范围的简单包名称,将 public 包发布到 https://www.npmjs.com/ 时经常出现这种情况
- GitHub 工作流程使用 GitHub 的 Node.js 包 模板 配置
在 run: npm ci
默认步骤之前向 publish-gpr
作业添加额外的步骤,以便将当前存储库的所有者动态插入到 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