查询有关范围npm软件包特定版本的信息

时间:2018-11-08 17:11:10

标签: node.js npm npmjs

我可以成功查询特定NPM软件包的特定版本的元信息,如下所示:

GET https://registry.npmjs.org/<name>/<version>

例如:https://registry.npmjs.org/camelcase/2.1.1

但是对于像@angular/core这样的作用域包来说,这是行不通的。我尝试了以下所有方法,但都失败了:

查询作用域包的特定版本的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过bash命令执行此操作:

npm view @angular/core/6.1.10

因此npm向请求范围的软件包添加了一些身份验证。为此,您必须在本地目录中具有有效的package.json。

当然,在最坏的情况下,您可以执行process.spawn()来运行npm命令。

仅供参考,我尝试使用带有npm凭据的npm-registry-client软件包:

var RegClient = require('npm-registry-client')
var client = new RegClient({
    username: 'mememe',
    password: 'xxxxx'
})
var uri = "https://registry.npmjs.org/@angular/core/6.1.10"
var params = {timeout: 1000}

client.get(uri, params, function (error, data, raw, res) {
  console.log(data);
})

我明白了:

info attempt registry request try #1 at 09:52:09
http request GET https://registry.npmjs.org/@angular/core/6.1.10
http 401 https://registry.npmjs.org/@angular/core/6.1.10
WARN notice ERROR: you cannot fetch versions for scoped packages

似乎它们不允许特定的版本查询,但是根据@RobC在下面的注释,它们确实允许获取整个存储库的信息,因此您可以在客户端进行此操作:

url = 'https://registry.npmjs.org/@angular%2fcore';

const fetch = require('node-fetch');

fetch(url).then(response => response.json()).then(results => {
    console.log(results.versions['6.1.10']);
});