Как получить все пакеты npm, соответствующие конкретному ключевому слову в формате JSON?
Не имея опыта с кушеткой и redis, это становится больше, чем я могу справиться в этот момент.
Веб-сайт npm позволяет вам искать пакеты по ключевому слову - https://npmjs.org/browse/keyword/awesome
Однако он не предоставляет какой-либо способ получить эту информацию в формате json - в идеале мы могли бы просто сделать https://npmjs.org/browse/keyword/awesome.json, но это не так: (
Я знаю, что веб-сайт npm работает от couchdb и локального экземпляра redis. Удаленная установка couchdb http://registry.npmjs.org/ и работает под управлением https://github.com/isaacs/npmjs.org
Однако, проведя день, изучая это, я просто не могу понять, как получить все пакеты определенного ключевого слова. Кто-нибудь знает как? Бонусные баллы, если вы также объясните процесс, который вы выяснили, как это сделать, чтобы я знал в следующий раз:)
Ответы
Ответ 1
Отличный вопрос!
Это даст вам то, что вы ищете о конкретном модуле:
npm view request
Чтобы получить то, что вы хотите для всех модулей, вы можете нажать на URL:
https://registry.npmjs.org/-/all/
После заливки этих двух файлов:
Я пришел к следующим выводам:
- Я очень удивлен, что нет лучшего способа сделать поиск без прямого удара couchdb.
- Клиент NPM из командной строки выполняет поиск внутри node.js путем сортировки и фильтрации по полному результату этого /all/search, указанного выше.
- Веб-сайт даже не беспокоится о реальном поиске, поскольку он закладывает его в поисковую систему.
- Поиск по ключевому слову, который вы хотите, не получит те же результаты, что и NPM командной строки. Это действительно ограничено по охвату атрибутом ключевого слова, другие параметры поиска могут быть доступны через (см. Выше в search.js).
- Запрос будет выглядеть действительно странно.
Попробуйте следующее:
https://registry.npmjs.org/-/_view/byKeyword?startkey=["keyword"]&endkey=["keyword",{}]&group_level=3
Кроме того, одна короткая заметка, это вопрос, который, вероятно, получит ответ в чате node.js или списке рассылки примерно за 4 секунды:)
Надеюсь, что это поможет.
Ответ 2
Основываясь на этом ответе, я написал небольшую библиотеку для node, https://github.com/wires/npm-keywordsearch.
npm install npm-keywordsearch
затем
var search = require('npm-keywordsearch')
search('my-plugin', function (error, packages) {
packages.forEach(function (pkg) {
console.log(pkg.name + ': ' + pkg.description)
})
})
Может быть полезно для вас
Ответ 3
Для тех, кто запрашивает это для реализации плагина, я сделал https://github.com/bevry/pluginclerk на основе вопрос о конечной точке реестра. Он будет обрабатывать такие вещи, как совместимость на основе ваших текущих зависимостей, а также реализует уровень кэширования.