最近在看axios源码,看到项目根目录下有一个名为
.npmignore的文件,查询文档发现它是一种黑名单机制,在包发布时用于排除某些文件或目录。
内容语法格式
跟.gitignore基本一样。下面是axios源码里的配置内容:
**/.*
*.iml
coverage/
examples/
node_modules/
typings/
sandbox/
test/
bower.json
CODE_OF_CONDUCT.md
COLLABORATOR_GUIDE.md
CONTRIBUTING.md
COOKBOOK.md
ECOSYSTEM.md
Gruntfile.js
karma.conf.js
webpack.*.js
sauce_connect.log
可以看到忽略了二级目录下的任何.文件,examples目录,sandbox目录,test目录,webpack、grunt、karma等配置文件.当然也必须有node_modules目录。
另,如果没有指定该文件,npm默认会将.gitignore视为.npmignore
对比项目目录和发布的包目录
还是拿axios举例。
项目目录:
最终发布到npm的包目录:
设置白名单
比如,我有一份非常全的.npmignore清单,我不想去动它,可又想把清单上的一些文件放开并上传到npm,怎么办呢?
答案是:通过配置package.json里的files字段来解决。
比如,我的.npmignore清单忽略了examples整个目录:
examples
配置package.json里的files字段放开examples下的white-label.txt文件:
{
"files": [
"examples/white-label.txt"
],
}
优先级问题
如果项目同时存在.gitignore,.npmignore,并且配置了files字段,优先级如下:
files>.npmignore>.gitignore。