Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“为什么?”;npm搜索“;提供不完整的结果?_Npm - Fatal编程技术网

“为什么?”;npm搜索“;提供不完整的结果?

“为什么?”;npm搜索“;提供不完整的结果?,npm,Npm,我注意到,使用npm search命令并不能保证结果的完整性。以下是一个例子: $npm search jasmine 未列出jasmine diff,jasmine diff reporter软件包,而 $npm search jasmine diff 是的 我读过,没有提到任何不完整的地方,事实上它是这样说的 npm search通过包元数据对注册表中的所有文件执行…搜索 我认为,这在某种程度上意味着,搜索应该是一致和完整的。正如人们可以看到的那样,jasmine diff report

我注意到,使用
npm search
命令并不能保证结果的完整性。以下是一个例子:

$npm search jasmine
未列出
jasmine diff
jasmine diff reporter
软件包,而

$npm search jasmine diff
是的

我读过,没有提到任何不完整的地方,事实上它是这样说的

npm search通过包元数据对注册表中的所有文件执行…搜索

我认为,这在某种程度上意味着,搜索应该是一致和完整的。正如人们可以看到的那样,jasmine diff reporter软件包的关键字中确实有一个术语jasmine

在description部分中没有单词jasmine并不重要,因为像jasmine diff这样的其他软件包都有这个单词,并且在
$npm search jasmine
输出中仍然缺失

那么,有没有人能以某种方式解释这种行为和/或建议一种解决方法(除了使用谷歌或类似的工具)?

问题在于,在中实现的“npm搜索”的新“快速端点搜索”。我现在注册了一个bug:

我调查了npm脚本,发现旧搜索使用URL获取包信息,而新搜索使用。*%2F&size=20。此值“20”是硬编码的,但您可以使用“npm搜索”的--searchlimit=N参数对其进行更改,这是最简单的解决方法

唯一的问题是你永远不知道搜索结果有多大。没有表示“无限”的值(我试图通过-1,但它不起作用)。如果您确实需要完整搜索,您可以拒绝“npm search”并直接解析的JSON输出,也可以破解文件/lib/node_modules/npm/lib/search.js并添加您自己的参数--oldsearch:

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()
})
在这之后,您可以说“npmsearch--oldsearch--registry…'/regexp/”,并且它必须真正显示所有包

附加说明(很高兴知道): 请注意,在节点安装中使用.js脚本进行操作(在其中添加打印输出等)时,可能会出现错误消息

npm ERR! invalid value written to input stream
在那之后,有些东西被破坏了,“npm搜索”完全停止工作或者显示很少的输出。为了修复此问题,只需继续添加其他打印输出,直到再次出现上述消息失败。然后在下一次运行(仅一次)时,您会看到以下消息:

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
然后它又恢复到正常状态。我并没有调查furhter为什么会发生这种情况,也并没有找到强制使这个搜索缓存失效的方法


我希望我的调查能对某些人有所帮助。

您是否尝试过npm搜索“jasmine*”@Java,现在就开始。相同的结果(至少jasmine diff和jasmine diff reporter都不存在),并且没有搜索词突出显示