如果package.json
有files
道具和/或directories
道具:
"files": [
"./src/assets/fonts/"
],
"directories": {
"assets:": "./src/assets"
}
有哪些方法可以利用它们?文档没有提到一旦指定它们可以用它们做什么。
例如,files docs说:
“files”字段是要包含在项目中的文件数组。如果您在数组中命名文件夹,那么它还将包含该文件夹中的文件。
“包含在您的项目中”是什么意思?包括在哪里?现在他们怎么可以访问呢?
在directories section中,文档说:
将来,此信息可能会以其他创意方式使用。
现有的创作方式有哪些?
答案 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
数组中列出包中实际需要的文件。无论如何,files
,README.*
,package.json
(可能还有其他几个)会自动包含在tarball中。所以你只需添加CHANGELOG.*
就可以了。现在你的包tarball将不包括来自"files": [ "dist" ]
的原始源JS,也不包括lib
等,而是仅包含tests/
中实际编译的lib。
至于dist/
,我通常会列出directories
(对于es5),lib
(对于es6,coffeescript,typescript等来源),src
(对于浏览器或vm特定的构建),dist
,test
(用于临时生成的文件,如覆盖率报告等),output
等。虽然npm或其他工具不直接使用此属性,它使目录结构显式。此外,它使目录在npm脚本中可引用,如下所示:
doc
通过这种方式,目录只被指定一次,如果它们发生了变化,它们只需要在一个位置进行更改(而不是整个package.json中的很多)。