Ignoriert NPM die in .gitignore aufgelisteten Dateien?

78

Ich habe eine Datei, die durch npm installBefehl (mit preinstallAufgabe) generiert wird . Ich möchte es weder im Git-Repository noch im NPM-Projekt hinzufügen.

Angenommen, der Dateiname ist foo.json, habe ich ihn in der .gitignoreDatei als hinzugefügt foo.json.

Reicht dies aus, um ein Hochladen in die NPM-Registrierung zu vermeiden?

Ich weiß, dass ich eine .npmignoreDatei hinzufügen kann, die die Datei sicherlich ignoriert, aber ich werde sie nicht hinzufügen, wenn dies .gitignorebereits geschehen ist.

Ionică Bizău
quelle

Antworten:

129

Wenn ein Projekt sowohl eine .npmignoreals auch eine .gitignoreDatei enthält, verwendet npm nur die .npmignoreDatei.

Aus der Dokumentation :

Verwenden Sie eine .npmignoreDatei, um Dinge aus Ihrem Paket herauszuhalten. Wenn es keine gibt .npmignoreDatei, aber es ist eine .gitignoreDatei, dann wird npm das Zeug durch die angepasste ignoriert .gitignoreDatei. Wenn Sie etwas einschließen möchten , das von Ihrer .gitignoreDatei ausgeschlossen ist, können Sie eine leere .npmignoreDatei erstellen , um sie zu überschreiben.

Einfacher ausgedrückt, npm bevorzugt die .npmignoreDatei, wenn sie vorhanden ist, greift jedoch auf die .gitignoreDatei zurück.

In vielen Fällen können sowohl Git als auch npm dieselben Dateien ignorieren. Daher ist es sinnvoll, nur eine .gitignoreDatei alleine zu verwenden. Wenn es jemals eine Diskrepanz gibt (dh npm und Git müssen unterschiedliche Dateien ignorieren), müssen Sie separate Dateien .gitignoreund .npmignoreDateien verwalten.

Weitere Informationen zum Ablegen von.npmignore Dateien: Soll ich meine Tests .npmignore?

cmbuckley
quelle
1
Es hat eine andere Situation, aber ziemlich ähnlich, ich habe eine .gitignore, die ein Verzeichnis ausschließt, bin/in das meine transkompilierte ES6-App geht, damit ich lib/die von ES6 geschriebene App pushen kann . Aber wie Sie vielleicht herausfinden, ist das Problem, dass das veröffentlichte Paket in npm diebin/
Carlos Araya
3
Klingt so, als ob Sie eine .npmignoreDatei benötigen , die denselben Inhalt wie .gitignoredie bin/entfernte Zeile enthält.
cmbuckley
Ich möchte das genaue Gegenteil. Ich möchte, dass npm einen Ordner hinzufügt, obwohl er in .gitignore
Lajos Meszaros
@LajosMeszaros Der zweite Satz behandelt Folgendes: "Wenn Sie etwas einschließen möchten, das von Ihrer .gitignoreDatei ausgeschlossen ist, können Sie eine leere .npmignoreDatei erstellen , um sie zu überschreiben." In Ihrem Fall müssen Sie kopieren .gitignorezu .npmignore, und die Ordner aus entfernen .npmignorenur.
cmbuckley
19

Für alle, die dies lesen und versuchen, eine Datei / ein Verzeichnis von git zu ignorieren, es aber in npm Publish aufnehmen möchten und versucht haben, eine leere .npmignoreDatei ohne Glück zu verwenden. Das funktioniert.

In Ihrer .gitignoreDatei, fügen Sie die Datei / dir Sie ausschließen möchten , **/buildzum Beispiel und in Ihrer .npmignoreDatei stellen Sie sicher , geben Sie die gleiche Datei / dir aber mit dem !Präfix so für den Build Beispiel würden Sie umfassen!**/build

Stewart Duffy
quelle