最近在看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
。