NPM会忽略在.gitignore中列出的文件吗?

94
我有一个通过npm install命令生成的文件(使用preinstall任务)。 我既不想将其添加到git存储库中,也不想将其添加到NPM项目中。
假设文件名为foo.json,我将其添加到.gitignore文件中作为foo.json
这样就足以避免在NPM注册表上上传它了吗?
我知道可以添加.npmignore文件来确保忽略该文件,但如果.gitignore已经这样做了,我就不会添加它。
2个回答

157
如果一个项目同时有`.npmignore`和`.gitignore`文件,npm将**仅仅**使用`.npmignore`文件。
根据文档: > 使用`.npmignore`文件来排除你的包中的一些内容。如果没有`.npmignore`文件,但是有`.gitignore`文件,那么npm将会忽略`.gitignore`文件中匹配的内容。如果你想要包含`.gitignore`文件中排除的内容,你可以创建一个空的`.npmignore`文件来覆盖它。
简单来说,npm更倾向于使用`.npmignore`文件,但是它会回退到`.gitignore`文件。
在许多情况下,Git和npm可以忽略相同的文件,所以只使用`.gitignore`文件是有道理的。
如果你需要让npm和Git忽略不同的文件,那么你需要维护独立的.gitignore和.npmignore文件。
关于在.npmignore文件中放置什么内容的更多信息,请参考:我应该在.npmignore中忽略我的测试吗?

1
它有一个不同的情况,但相当相似,我有一个.gitignore文件,其中排除了一个名为bin/的目录,我的转译ES6应用程序位于其中,因此我可以推送lib/,这是ES6编写的应用程序。但是,正如您可能想象的那样,问题在于npm中发布的软件包必须具有bin/ - Carlos Araya
3
看起来你需要一个.npmignore文件,其中包含与.gitignore相同的内容,但删除了bin/行。 - cmbuckley
我想要完全相反的结果。尽管在.gitignore中存在,但我希望npm添加一个文件夹。 - Lajos Mészáros
@LajosMeszaros 第二句话解释了这一点:“如果你想包含被.gitignore文件排除的内容,你可以创建一个空的.npmignore文件来覆盖它。”在你的情况下,你需要将.gitignore复制到.npmignore中,并仅从.npmignore中删除该文件夹。 - cmbuckley

31

如果有人想要在git中忽略某个文件或目录,但希望在npm发布时将其包括在内,并尝试使用空的.npmignore文件却无法实现。以下方法有效。

在你的.gitignore文件中,添加你想要排除的文件或目录,例如**/build,然后在.npmignore文件中确保指定相同的文件或目录,但加上!前缀。例如,在构建示例中你应该包含!**/build


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接