错误:“npm WARN package.json:没有存储库字段”

918

我使用以下命令安装了 Express.js:

sudo npm install -g express

我收到以下警告:

npm WARN package.json range-parser@0.0.4 No repository field.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json methods@0.0.1 No readme data.
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json pause@0.0.1 No repository field.
npm WARN package.json bytes@0.2.0 No repository field.
npm WARN package.json github-url-from-git@1.1.1 No repository field.
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.

为什么我会收到上述警告?我应该担心吗?


25
看到这个问题一年后,我意识到每次安装npm包时,我都会在心理上忽略这些警告。这可能是包开发者应该更加谨慎的事情。 - nha
@nha 是的,我通常在进行一些npm操作时会看到这些警告,并且如果它在我正在开发的包中,我会修复它们。 - gustavohenke
40
对于私有仓库,只需在 package.json 文件中添加 "private": true"。 - chovy
12个回答

1402

截至NPM v1.2.20,这只是一个检查,他们将其报告为警告。

但是,不用担心,仍然有很多软件包在它们的package.json中没有repository字段。该字段仅用于信息目的。

如果您是软件包作者,请像这样在您的package.json中添加repository

"repository": {
  "type": "git",
  "url": "git://github.com/username/repository.git"
}

了解有关 repository 字段的更多信息,并查看记录的错误以获取更多详细信息。


此外,正如@dan_nl最初报告的那样,您可以在 package.json 中设置 private 键。
这不仅会阻止您意外运行 npm publish ,还会阻止NPM打印有关 package.json 问题的警告。

{
  "name": "my-super-amazing-app",
  "version": "1.0.0",
  "private": true
}

21
我回答后几个月了,到目前为止似乎没有出现任何问题 :) - gustavohenke
3
NPM 2.14现在会在repository为空且private设置为true时打印错误。 - Blaise
9
@Blaise,我在使用“private:true”时,在NPM 3.3.3中没有收到任何警告。 - gustavohenke
4
为什么“私有”不是默认设置呢?我的意思是,创建了多少个npm项目与实际发布的数量相比,真的有比用户代码更多的库代码吗? - Felype
你提供的文档并没有解释为什么这个字段是必需的,只是说它很有用。从技术上讲,它并不是必需的(警告 vs. 错误),但我相信有人会想知道为什么这个工具在意它。 - Aluan Haddad
显示剩余3条评论

411

如果您不打算将应用程序放入实际的代码库中,也可以将其标记为私有。

{
  "name": "my-application",
  "version": "0.0.1",
  "private": true
}

56

正如dan_nl所说,您可以在package.json中添加一个私有的虚拟存储库。你甚至不需要为它命名或指定版本:

{
  ...,
  "repository": {
    "private": true
  }
}

更新:该功能未记录,并且可能无法工作。请选择以下选项。

更好的方法是:直接设置private标志。这样npm也不会要求提供README文件:

{
  "name": ...,
  "description": ...,
  "version": ...,
  "private": true
}

1
收到另一位用户关于此答案的通知。根据https://docs.npmjs.com/files/package.json,`repository.private`似乎不是文档化的行为(或者已不再被接受)。 - gustavohenke
1
@gustavohenke:谢谢,看来你是对的 - private作为顶级属性是更好的选择。已更新我的答案。 - wortwart
直接设置私有标志位-这对我不起作用,我必须在“存储库”部分内指定私有标志位。Npm版本9.6.7 - undefined
令人惊讶的是,在v9版本中,“private”属性仍然是官方的方式(https://docs.npmjs.com/cli/v9/configuring-npm/package-json#private),而“repository.private”则没有记录,可能(或者很可能)无法正常工作。 - undefined

48
如果你是从自己的package.json获取这个信息的,只需在其中添加repository字段(使用指向实际存储库的链接)即可。
"repository" : { 
   "type" : "git",
   "url" : "https://github.com/npm/npm.git"
 }

感谢您澄清使用完整的Github项目文件链接(包括“http://”或“https://”! - twknab

9
你运行过npm init吗?这个命令会引导你完成所有操作。

8
在简单的话来说,你的项目的package.json没有repository属性,你必须添加它,同时你需要在package.json中像下面这样添加repository:

enter image description here

根据您的情况,让我来解释一下。
您必须添加类似以下的存储库字段。
  "repository" : {     
     "type" : "git",
      "url" : "http://github.com/npm/express.git" 
   }

7

为了避免出现如下警告:

npm WARN project.com@1.0.0 No repository field.

您需要在项目的package.json文件中定义仓库信息。在没有发布到仓库时,您可以在package.json文件中设置"private": true

例子:

{
  "name": "test.loc",
  "version": "1.0.0",
  "private": true,
  ...
  "license": "ISC"
}

NPM文档关于这个的介绍:https://docs.npmjs.com/files/package.json


7

如果您不想指定存储库,可以将以下行添加到package.json文件中:

"description":"",
"version":"0.0.1",
"private":true,

这对我有用。
通过添加private,您不需要链接到存储库。


4

这将帮助大家找到自己正确的详细信息,请使用:

npm ls dist-tag

这将显示正确的信息,以便您不必猜测版本文件位置等等。祝愉快 :)

1
我收到了一个“--empty”的响应。 - M.J

3
是的,您可以通过在命令末尾包含-f来重新/创建一个文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接