Wie Sie wahrscheinlich festgestellt haben, gibt NPM nicht genau an, was dort hineingelangen soll, sondern enthält eine Liste von standardmäßig ignorierten Dateien . Viele Leute benutzen es nicht einmal, da alles in Ihrem standardmäßig .gitignoreignoriert npmwird, wenn .npmignorees nicht existiert. Darüber hinaus werden viele Dateien unabhängig von den Einstellungen bereits standardmäßig ignoriert, und einige Dateien werden immer vom Ignorieren ausgeschlossen, wie im obigen Link beschrieben.
Es gibt nicht viel Offizielles darüber, was immer da sein sollte, da es sich im Grunde genommen um eine Teilmenge von handelt .gitignore, aber von dem, was ich aus der Verwendung von Node für 5 Jahre gewonnen habe, habe ich mir Folgendes ausgedacht.
Hinweis: Mit Produktion meine ich jede Zeit, in der Ihr Modul von jemandem verwendet wird und nicht auf dem Modul selbst entwickelt wird.
Cross-kompilierte Quellen vor der Veröffentlichung
Vorteile : Wenn Sie eine Sprache verwenden, die in JavaScript überkompiliert wird, können Sie diese vor der Veröffentlichung vorkompilieren und keine .coffeeDateien in Ihr Paket aufnehmen, sondern sie weiterhin in Ihrem Git-Repository verfolgen.
Erstellen Sie Dateireste
Vorteile : Benutzer, die Dinge wie node-gypverwenden, haben möglicherweise Objektdateien, die während eines Builds generiert werden und niemals in das Paket aufgenommen werden sollten.
Nachteile : Dies sollte .gitignoresowieso immer in die gehen . Sie müssen diese Dinge hier einfügen, wenn Sie .npmignorebereits eine Datei verwenden, da diese .gitignoreaus Sicht von npm überschrieben wird .
Tests
Vorteile : Weniger Gepäck in Ihrem Produktionscode.
Nachteile : Sie können keine Tests in Live-Umgebungen ausführen, wenn die Wahrscheinlichkeit gering ist, dass ein systemspezifischer Fehler auftritt, z. B. eine veraltete Version des Knotens, die ausgeführt wird und dazu führt, dass ein Test fehlschlägt.
Vorteile : Wieder weniger Gepäck. Dinge, .travis.ymldie zum Verwenden, Testen oder Anzeigen des Codes nicht erforderlich sind.
Nicht Readme-Dokumente und Codebeispiele
Vorteile : Weniger Gepäck. Es gibt einige Leute in der Denkschule, bei denen Ihr Modul zu groß ist, wenn Sie in Ihrer Readme-Datei nicht mindestens die Mindestfunktionalität ausdrücken können.
Nachteile : Benutzer können keine ausführliche Dokumentation und Codebeispiele in ihrem eigenen Dateisystem sehen. Sie müssten das Repository besuchen (für das auch eine Internetverbindung erforderlich ist).
Github-Seitenobjekte
Vorteile : Sie müssen Ihre Veröffentlichungen sicherlich nicht mit CNAMEDateien oder Platzhaltern verunreinigen, index.htmlwenn Sie Ihr Modul verwenden, das auch als gh-pagesRepository dient .
bower.json und Freunde
Vorteile : Wenn Sie Ihre Abhängigkeiten vor der Veröffentlichung einbauen möchten, muss der Endbenutzer bower nicht installieren, sondern weitere Dinge damit installieren. Ich persönlich würde das Zeug im Paket behalten. Wenn ich eine mache npm install, sollte ich mich nur auf npm und keine anderen externen Quellen verlassen.
Grundsätzlich sollten Sie es immer verwenden, wenn Sie etwas aus Ihrem npm-Paket heraushalten möchten, aber nicht aus Ihrem npm-Repository. Es ist keine lange Liste von Elementen, aber npm würde lieber die Funktionalität einbauen, als dass Leute mit irrelevanten Objekten in ihrem Paket stecken bleiben.
Gibt es keine Möglichkeit, nicht verwendbare Skripte aus der Datei package.json zu entfernen? ZB Testskripte? Ich fühle mich ein bisschen chaotisch, alles zu entfernen, aber die Skripte in der Datei zu behalten ...
inf3rno
Nein, da ist kein. Sie können sie in der package.json weglassen, da dies ohnehin hauptsächlich für NPM gilt. Wenn Sie nur Tests ausführen, können Sie über den ursprünglichen Befehl auf sie zugreifen, um sie auszuführen.
Sie sollten Ihre Tests nicht in Ihr Paket aufnehmen.
Ihr Paket sollte nur Produktionslaufzeitdateien enthalten.
Dadurch wird Ihr Paket einfacher und schneller heruntergeladen.
Mein Beitrag zu diesen Antworten:
.npmignore ist die Blacklist- Methode zur Auswahl von Paketdateien. Aber in einer praktischeren Weise können Sie die weiße Liste setzen Sie in Ihrem Paket - Dateien müssen schließen mit dem Datei Feld in Ihrem package.json:
{"files":["lib/","index.js"]}
Ich denke das ist einfacher, zukunftssicher und hat eine bessere Semantik;)
... ganz zu schweigen von leichter zu merken und weniger unfallanfällig (wenn Sie so vergesslich sind wie ich). Danke für den Tipp, das ist super.
Connor
2
Ich mag diesen Ansatz.
Brady Holt
2
Ich denke, Sie können sogar die "index.js" weglassen, vorausgesetzt, es ist die 'Haupt'-Datei in Ihrer package.json :)
Ben George
Das Ignorieren von Bildern und unnötigen Dokumenten ist in Ordnung. Aber das Ignorieren der Tests ist wahrscheinlich keine gute Idee. Das Herunterladen einiger zusätzlicher KBs nimmt nicht so viel Zeit in Anspruch, und eine Rekursionnpm test über alle node_modules hinweg kann Ihnen einen Hinweis geben, ob in einer bestimmten Umgebung etwas anders funktioniert.
Adelriosantiago
3
@ NicolásFantone Die Eigenschaft files akzeptiert auch das Glob- Muster. So können wir die Testdateien ignorieren, ohne sie zu erstellen .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj
15
Zur Verdeutlichung lädt npm jedes Mal , wenn jemand dies tut npm install your-library, alle Quelldateien herunter, die das Repo enthält, mit Ausnahme der Dateien, die Sie in Ihr Repo aufnehmen ..npmignore
Wissen Sie, dass Leute, die Ihre Bibliothek installieren, nur Ihre Bibliothek ausführen müssen, alles andere ist nicht erforderlich.
Wenn zum Beispiel jemand eine Bibliothek installiert, ist es wahrscheinlich, dass er sich nicht um Ihre .travis.ymloder Ihre .jshintrcDateien oder sogar um einige Bilder, Grunt-Dateien, Dokumentationen usw. kümmert .
.npmignore könnte dazu führen, dass Ihr npm-Paket weniger Dateien enthält und schneller heruntergeladen werden kann
Die Stimmung hier ist gut, aber um es zu verdeutlichen: .npmignoreBeeinflusst nicht direkt, was heruntergeladen wurde , sondern was in Ihr Paket aufgenommen wird, wenn Sie npm veröffentlichen und hochladen. Dadurch werden indirekt kleinere Dateien zum Herunterladen erstellt.
Mark Stosberg
2
Schließen Sie Ihre Tests nicht ein. Oft sind Tests etwa 5x so groß wie die eigentliche Codebasis. Solange Ihre Tests auf Github usw. durchgeführt werden, ist das gut genug.
Was Sie jedoch unbedingt tun sollten, ist, Ihr NPM-Paket in seinem veröffentlichten Format zu testen . Erstellen Sie einige Rauchtests, die sich in der eigentlichen Codebasis befinden, aber nicht Teil der Testsuite sind.
npm install yourlibrary
.travis.yml
.jshintrc
.npmignore
oder automatisch eingefügt"files"
( docs.npmjs.com/files/package.json#files ).Antworten:
Wie Sie wahrscheinlich festgestellt haben, gibt NPM nicht genau an, was dort hineingelangen soll, sondern enthält eine Liste von standardmäßig ignorierten Dateien . Viele Leute benutzen es nicht einmal, da alles in Ihrem standardmäßig
.gitignore
ignoriertnpm
wird, wenn.npmignore
es nicht existiert. Darüber hinaus werden viele Dateien unabhängig von den Einstellungen bereits standardmäßig ignoriert, und einige Dateien werden immer vom Ignorieren ausgeschlossen, wie im obigen Link beschrieben.Es gibt nicht viel Offizielles darüber, was immer da sein sollte, da es sich im Grunde genommen um eine Teilmenge von handelt
.gitignore
, aber von dem, was ich aus der Verwendung von Node für 5 Jahre gewonnen habe, habe ich mir Folgendes ausgedacht.Hinweis: Mit Produktion meine ich jede Zeit, in der Ihr Modul von jemandem verwendet wird und nicht auf dem Modul selbst entwickelt wird.
Cross-kompilierte Quellen vor der Veröffentlichung
.coffee
Dateien in Ihr Paket aufnehmen, sondern sie weiterhin in Ihrem Git-Repository verfolgen.Erstellen Sie Dateireste
node-gyp
verwenden, haben möglicherweise Objektdateien, die während eines Builds generiert werden und niemals in das Paket aufgenommen werden sollten..gitignore
sowieso immer in die gehen . Sie müssen diese Dinge hier einfügen, wenn Sie.npmignore
bereits eine Datei verwenden, da diese.gitignore
aus Sicht von npm überschrieben wird .Tests
Kontinuierliche Integrationseinstellungen / Metadateien
.travis.yml
die zum Verwenden, Testen oder Anzeigen des Codes nicht erforderlich sind.Nicht Readme-Dokumente und Codebeispiele
Github-Seitenobjekte
CNAME
Dateien oder Platzhaltern verunreinigen,index.html
wenn Sie Ihr Modul verwenden, das auch alsgh-pages
Repository dient .bower.json und Freunde
npm install
, sollte ich mich nur auf npm und keine anderen externen Quellen verlassen.Grundsätzlich sollten Sie es immer verwenden, wenn Sie etwas aus Ihrem npm-Paket heraushalten möchten, aber nicht aus Ihrem npm-Repository. Es ist keine lange Liste von Elementen, aber npm würde lieber die Funktionalität einbauen, als dass Leute mit irrelevanten Objekten in ihrem Paket stecken bleiben.
quelle
Ich stimme der kurzen und syntetischen Antwort von Lante und der großen Antwort von SamT zu :
Mein Beitrag zu diesen Antworten:
.npmignore ist die Blacklist- Methode zur Auswahl von Paketdateien. Aber in einer praktischeren Weise können Sie die weiße Liste setzen Sie in Ihrem Paket - Dateien müssen schließen mit dem Datei Feld in Ihrem package.json:
Ich denke das ist einfacher, zukunftssicher und hat eine bessere Semantik;)
quelle
npm test
über alle node_modules hinweg kann Ihnen einen Hinweis geben, ob in einer bestimmten Umgebung etwas anders funktioniert..npmignore
.files: ["lib", "!lib/**/*.test.js"]
. :)Zur Verdeutlichung lädt npm jedes Mal , wenn jemand dies tut
npm install your-library
, alle Quelldateien herunter, die das Repo enthält, mit Ausnahme der Dateien, die Sie in Ihr Repo aufnehmen ..npmignore
Wissen Sie, dass Leute, die Ihre Bibliothek installieren, nur Ihre Bibliothek ausführen müssen, alles andere ist nicht erforderlich.
Wenn zum Beispiel jemand eine Bibliothek installiert, ist es wahrscheinlich, dass er sich nicht um Ihre
.travis.yml
oder Ihre.jshintrc
Dateien oder sogar um einige Bilder, Grunt-Dateien, Dokumentationen usw. kümmert ..npmignore
könnte dazu führen, dass Ihr npm-Paket weniger Dateien enthält und schneller heruntergeladen werden kannquelle
.npmignore
Beeinflusst nicht direkt, was heruntergeladen wurde , sondern was in Ihr Paket aufgenommen wird, wenn Sie npm veröffentlichen und hochladen. Dadurch werden indirekt kleinere Dateien zum Herunterladen erstellt.Schließen Sie Ihre Tests nicht ein. Oft sind Tests etwa 5x so groß wie die eigentliche Codebasis. Solange Ihre Tests auf Github usw. durchgeführt werden, ist das gut genug.
Was Sie jedoch unbedingt tun sollten, ist, Ihr NPM-Paket in seinem veröffentlichten Format zu testen . Erstellen Sie einige Rauchtests, die sich in der eigentlichen Codebasis befinden, aber nicht Teil der Testsuite sind.
Informationen zum Testen Ihres Pakets nach dem Tarballing finden Sie hier: https://github.com/ORESoftware/r2g
Wie kann man ein "npm Publish" -Ergebnis testen, ohne es tatsächlich in NPM zu veröffentlichen?
quelle