你如何使用package.json中的'files'和'目录'属性?

时间:2016-11-24 23:39:40

标签: npm package.json

如果package.jsonfiles道具和/或directories道具:

  "files": [
    "./src/assets/fonts/"
  ],
  "directories": {
     "assets:": "./src/assets"
  }

有哪些方法可以利用它们?文档没有提到一旦指定它们可以用它们做什么。

例如,files docs说:

  

“files”字段是要包含在项目中的文件数组。如果您在数组中命名文件夹,那么它还将包含该文件夹中的文件。

“包含在您的项目中”是什么意思?包括在哪里?现在他们怎么可以访问呢?

directories section中,文档说:

  

将来,此信息可能会以其他创意方式使用。

现有的创作方式有哪些?

1 个答案:

答案 0 :(得分:65)

“包含在您的项目中”意味着文件将位于运行npm publish时创建的打包的tarball中。您还可以运行npm pack生成tarball以进行检查,而无需实际触发发布。通过这种方式,您可以实际打开生成的tarball并检查哪些文件未被包含。

虽然.npmignore(或.gitignore作为代理,如果没有.npmignore)充当要忽略的文件的黑名单(因此默认包含其他所有内容),{{1数组是白名单。也就是说,默认情况下不包括所有内容,如果指定了files数组,则默认情况下会排除所有内容,并且只有明确列出的文件才会包含在打包的tarball中。

举个例子,假设您的软件包是一个供浏览器使用的库。您的代码位于files,您运行browserify以编译到lib/的浏览器兼容的库中。您从dist/index.js中列出的一堆文件开始,这些文件用作不存在的事实.gitignore。但是现在.npmignore充满了生成的文件,你希望它们从git repo中被忽略。如果将它们添加到dist/,它们将被排除在git repo 之外,但它们也将从包tarball 中被忽略。因此,您有两种选择:将.gitignore复制为.gitignore,但仅在.npmignore中列出dist/。如果你这样做,你将不得不保持两个文件几乎 - 但不是完全同步。这种方式很容易出错并容易出错。

另一种选择是没有.gitignore,而只是在.npmignore数组中列出包中实际需要的文件。无论如何,filesREADME.*package.json(可能还有其他几个)会自动包含在tarball中。所以你只需添加CHANGELOG.*就可以了。现在你的包tarball将不包括来自"files": [ "dist" ]的原始源JS,也不包括lib等,而是仅包含tests/中实际编译的lib。

至于dist/,我通常会列出directories(对于es5),lib(对于es6,coffeescript,typescript等来源),src(对于浏览器或vm特定的构建),disttest(用于临时生成的文件,如覆盖率报告等),output等。虽然npm或其他工具不直接使用此属性,它使目录结构显式。此外,它使目录在npm脚本中可引用,如下所示:

doc

通过这种方式,目录只被指定一次,如果它们发生了变化,它们只需要在一个位置进行更改(而不是整个package.json中的很多)。