“包含在您的项目中”表示文件将在运行时创建的打包tarball中npm publish
。您也可以运行npm pack
生成tarball以进行检查,而无需实际触发发布。这样,您实际上可以打开生成的tarball并检查不包含/不包含哪些文件。
虽然.npmignore
(或.gitignore
作为代理,如果没有.npmignore
)用作要忽略的文件的黑名单(因此默认情况下包括其他所有内容),则该files
阵列为白名单。也就是说,如果files
没有指定默认值,则默认情况下不包括所有内容,并且默认情况下不包括所有内容,仅打包列出的tarball中将包含明确列出的那些文件。
例如,假设您的软件包是一个供浏览器使用的库。您的代码已包含lib/
在内,然后运行browserify编译为兼容浏览器的lib dist/index.js
。您首先.gitignore
从中列出的一堆文件开始,这些文件实际上是.npmignore
不存在的。但是现在dist/
已经充满了生成的文件,您希望从git repo中忽略它们。如果将它们添加到.gitignore
git repo中,则会将它们排除在外,但也会从tarball包中忽略它们。因此,您有两个选择:复制您的.gitignore
as,.npmignore
但仅dist/
在中列出.gitignore
。如果这样做,则必须使两个文件几乎同步但不完全同步。这种方式很麻烦并且容易出错。
另一种选择是不使用.npmignore
,而是只在files
数组中的包中列出您实际想要的文件。README.*
,package.json
,CHANGELOG.*
(也许一对夫妇等)会自动包含在压缩包而不管。因此,您只需添加即可"files": [ "dist" ]
完成。现在,您的压缩包tarball将不会包含来自的原始源JS lib
,也不会包含tests/
etc,而仅包含中的实际已编译库dist/
。
至于directories
,我通常列出lib
(对于es5),src
(对于es6,coffeescript,打字稿等源),dist
(对于浏览器或特定于vm的内部版本)test
、、output
(对于临时生成的文件,例如覆盖率报告等)doc
等。 npm或其他工具不直接使用此属性,它使目录结构明确。同样,它使目录在npm脚本中可引用,如下所示:
"scripts": {
"clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
"lint": "eslint $npm_package_directories_src",
"test": "teenytest $npm_package_directories_test",
}
这样,目录仅被指定一次,并且如果它们被更改,它们仅需要在单个位置(而不是整个package.json中的多个位置)进行更改。