为何NPM Pack打包时src目录下的.DS_Store未被自动排除?
解决npm pack时.DS_Store被意外打包的问题
我之前也碰到过一模一样的坑,给你几个实用的排查和解决方向:
1. 检查git是否还在追踪这个.DS_Store文件
npm处理.gitignore规则时有个容易忽略的细节:如果文件已经被git追踪过,哪怕后来加到.gitignore里,npm还是会把它包含进包中。
你可以先执行这个命令确认状态:
git ls-files -- src/.DS_Store
如果输出了src/.DS_Store,说明这个文件还在git的追踪列表里。解决办法是让git停止追踪它:
git rm --cached src/.DS_Store
提交这个变更后再重新执行npm pack,这个文件应该就不会被打包进去了。
2. 直接使用.npmignore替代gitignore规则
有时候.gitignore的规则不会被npm完全继承(尤其是当你在files字段指定目录时),最稳妥的方式是在项目根目录创建一个.npmignore文件,明确写入要排除的内容:
# .npmignore 内容 .DS_Store **/.DS_Store
**/.DS_Store会匹配所有子目录下的.DS_Store文件,这样不管哪个目录里的这类文件都会被npm排除,完全不受git追踪状态的影响。
3. 确认npm版本的兼容性
你用的是npm 6.x版本,这个版本对files字段和ignore规则的处理确实存在一些小bug。如果上面两个方法都没效果,可以试试升级到npm 7+版本(注意提前确认项目依赖是否兼容新版本),新版本对这些规则的处理更贴合官方文档描述。
另外也可以检查下你的.gitignore规则有没有被其他规则覆盖,比如有没有写过!*.DS_Store这种反向包含的规则,或者规则前面有没有多余空格导致不生效。
内容的提问来源于stack exchange,提问作者iceblueorbitz
相关产品推荐
相关产品推荐

