为什么我没有复制注册表数据库,但我的私有 npm 注册表会列出所有公共 npm 模块?

为什么我没有复制注册表数据库,但我的私有 npm 注册表会列出所有公共 npm 模块?

我一直在按照以下步骤设置私人 npm 注册表创建私人注册表的明确说明。 但是,我跳过复制步骤,因为我的目的是有一个仅容纳私有模块的空注册表。

然而,当我运行测试命令时,一切似乎都正常:

npm --registry http://localhost:5984/registry/_design/scratch/_rewrite search /^zipper

我得到以下输出,这表明 npm 正在寻找这个不应该存在于我的私人注册表中的公共模块:

npm http GET http://localhost:5984/npm_registry/_design/scratch/_rewrite/-/all/since?stale=update_after&startkey=1382392304289
npm http 200 http://localhost:5984/npm_registry/_design/scratch/_rewrite/-/all/since?stale=update_after&startkey=1382392304289
NAME           DESCRIPTION                                  AUTHOR      DATE              VERSION KEYWORDS
zipper         Insanely simple zipfile creator for node.js  =rubenv     2013-05-06 11:35  0.3.0  zip compress archive libzip
zipper-insane  Insanely simple zipfile creator for node.js  =diorahman  2011-12-17 15:54  0.0.1  zip compress archive libzip

此外,当我尝试从我的私有注册表安装模块时,它会安装。这是怎么回事?由于我正在运行自己的 CouchDB,而没有复制现有的 CouchDB,所以我预计数据库中不会有模块。

答案1

npm 客户端将包元数据和档案缓存在本地目录中,通常在 中~/.npm。当您进行搜索时,它只会向注册表询问更新,并使用缓存数据执行搜索。

不幸的是,npm cache 的实现不支持多个注册表,它总是合并来自所有注册表的所有数据。

作为一种解决方法,您可以告诉 npm 在与您的私有注册表通信时使用不同的缓存目录:

npm --registry http://localhost:5984/registry/etc. --cache $HOME/.npm-private

相关内容