【问题标题】:Is the "files" property necessary in package.json?package.json 中是否需要“files”属性?
【发布时间】:2016-10-17 20:24:28
【问题描述】:

看起来该包将包含所有文件(未被忽略),即使 package.json 没有 "files" 数组。

这个属性有必要吗?

【问题讨论】:

  • 有点相关,我想排除一些目录,但包括他们的父母。我最终做了"files": ["dist/*", "src/*", "!/**/__tests__"],

标签: npm package.json


【解决方案1】:

您可以将package.json 中的files property 视为应包含在npm 版本中的所有文件的允许列表,将.npmignore 视为拒绝列表应该包含的所有文件。

根据经验,对于我自己的项目,我通常使用:

  • files 当我的项目有很多不需要包含在 npm 版本中的辅助文件(如构建脚本、配置文件等)时
  • .npmignore 只有少数这样的辅助文件时

在我看来,这两个选项在不同的场景中都很有用。

【讨论】:

    【解决方案2】:

    并非如此,您可以使用.npmignore 完成所有操作,因为除非另有说明,否则所有文件都已添加。

    你可以看到更多here

    【讨论】:

    • 谢谢。该手册并没有真正说明默认情况下包含所有文件,这就是我想知道的原因。
    • .npmignore blacklists 文件,而 "files" whitelists。后者是避免发布不需要的文件的更好策略。
    • 不要使用.npmignoremedium.com/@jdxcode/…
    • 小心。 npm 通常会忽略您的 .gitignore 文件。如果你添加一个 .npmignore 并且不弹出你的 .gitignore 文件,你最终会将你的密钥等发布到你的公共 npm 包中。
    【解决方案3】:

    This article makes a good argument 用于使用 files 属性(如 F Lekschas 所说的白名单),而不是使用 .npmignore。原因包括:

    • 使用 .npmignore 会导致 .gitignore 被忽略,这可能是 出乎许多开发者的意料。
    • 开发人员通常将凭据保存在 包用于开发目的,他们当然不想 将它们包含在生产包中。使用白名单技术 大大降低了意外包装东西的可能性 这个。

    Note that some files are included even if you don't whitelist them。其中包括:

    package.json
    README
    CHANGES / CHANGELOG / HISTORY
    LICENSE / LICENCE
    NOTICE
    The file in the “main” field
    

    编辑地址评论。

    【讨论】:

    • 要点已解决。谢谢。
    • npmignore 不会导致.gitignore在日常工作中被忽略
    【解决方案4】:

    当没有.npmignore 文件时,将使用.gitignore 的内容。因此,在将生成的目录(如dist/)添加到您的.gitignore 时要小心,因为它们最终可能不在您的生产压缩包中。发生这种情况时,您可以使用 package.json 中的“文件”数组来包含它们,因为该文件中的包含将永远不会被排除。

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2018-01-04
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多