我注意到,使用npm search
命令并不能保证完整的结果。这是一个例子:
$npm search jasmine
未列出jasmine-diff
,jasmine-diff-reporter
个包,而
$npm search jasmine diff
确实
我读过the doc,并没有提到任何不完整性,确实是
npm搜索执行...搜索注册表中所有文件的包元数据
我认为,这在某种程度上意味着,搜索应该是一致和完整的。正如人们可以看到jasmine-diff-reporter软件包在其关键字中确实使用了 jasmine 一词:
并不重要,在描述部分中没有单词 jasmine ,因为像jasmine-diff这样的其他软件包具有该字,但在$npm search jasmine
输出中仍然缺少
那么有人能以某种方式解释这种行为和/或建议一种解决方法(除了使用谷歌或类似的东西)?
答案 0 :(得分:1)
问题是在https://github.com/npm/npm/commit/e3229324d507fda10ea9e94fd4de8a4ae5025c75中实现的针对“ npm search”的新“快速端点搜索”。我已经注册了一个错误:https://github.com/npm/cli/issues/1211。
我研究了npm脚本,发现旧搜索使用URL https://myNpmServer.com/repository/myNpmRegistry/-/all来获取软件包信息,而新搜索使用https://myNpmServer.com/repository/myNpmRegistry/-/v1/search?text=%2F。*%2F&size = 20。该值“ 20”是硬编码的,但是您可以使用“ npm search”的-searchlimit = N 参数对其进行更改,这是最简单的解决方法。
唯一的问题是您永远都不知道搜索结果如何。没有值表示“无穷大”(我试图通过-1,但没有用)。如果您确实需要完整搜索,则可以拒绝“ npm search”并直接解析https://myNpmServer.com/repository/myNpmRegistry/-/all的JSON输出,也可以修改文件
if (npm.config.get('oldsearch')) {
allPackageSearch(searchOpts).on('data', function (pkg) {
entriesStream.write(pkg)
}).on('error', function (e) {
entriesStream.emit('error', e)
}).on('end', function () {
entriesStream.end()
})
} else {
esearch(searchOpts).on('data', function (pkg) {
entriesStream.write(pkg)
!esearchWritten && (esearchWritten = true)
}).on('error', function (e) {
if (esearchWritten) {
// If esearch errored after already starting output, we can't fall back.
return entriesStream.emit('error', e)
}
log.warn('search', 'fast search endpoint errored. Using old search.')
allPackageSearch(searchOpts).on('data', function (pkg) {
entriesStream.write(pkg)
}).on('error', function (e) {
entriesStream.emit('error', e)
}).on('end', function () {
entriesStream.end()
})
}).on('end', function () {
entriesStream.end()
})
此后,您可以说“ npm search -oldsearch --registry ...'/ regexp /'”,它必须显示所有软件包。
附加说明(很高兴知道): 请注意,在Node安装中使用.js脚本进行操作(在其中添加打印输出等)期间,您会收到错误消息
npm ERR! invalid value written to input stream
在那之后,某些东西坏了,“ npm search”完全停止工作或显示很少的输出。为了修复此问题,只需继续添加其他打印输出,直到再次出现上述消息失败。然后下一次运行(仅一次),您将看到以下消息:
npm WARN all-package-metadata cached-entry-stream Empty or invalid stream
npm WARN Failed to read search cache. Rebuilding
npm WARN Building the local index for the first time, please be patient
,它再次返回到正确的状态。我没有进一步调查为什么会发生这种情况,也没有找到强制使此搜索缓存无效的方法。
我希望我的调查对某人有帮助。