Запрос информации о конкретной версии пакета npm с заданной областью действия - PullRequest
0 голосов
/ 08 ноября 2018

Я могу успешно запросить метаинформацию для конкретной версии определенного пакета NPM, например:

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

например: https://registry.npmjs.org/camelcase/2.1.1

Но для таких пакетов, как @angular/core, это не работает. Я попробовал все следующее, но все они терпят неудачу:

Как правильно запрашивать определенную версию пакета с областью действия?

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете сделать это с помощью команды bash:

npm view @angular/core/6.1.10

Таким образом, npm добавляет некоторую аутентификацию в запрос пакетов с областью действия. Чтобы это работало, у вас должен быть действительный package.json в локальном каталоге.

Конечно, в худшем случае вы можете выполнить process.spawn () для запуска команды npm.

К вашему сведению, я пытался использовать пакет npm-registry-client с моими учетными данными npm:

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']);
});
...