Das mag ein bisschen kompliziert sein, aber ich werde mein Bestes geben. Ich habe eine Reihe von API-Modulen, die ich mit Browserify verwende, und einige von ihnen rufen auch andere Module auf. Sie sind ziemlich miteinander verwoben, was die Aktualisierung erschweren wird.Aktualisieren Sie ein einzelnes CommonJS-Modul, ohne jedes einzelne benötigte Modul zu berühren.
Zum Beispiel habe ich fünf Module: A, B, C, D und E. A wird von B und C benötigt, und B wird von C, D und E benötigt. Wenn ich machen muss einige Updates zu A, die Änderungen brechen, ich könnte es versionieren, aber dann muss ich die require-Anweisungen in B und C aktualisieren. Und da B jetzt eine andere Version von A verwendet, muss ich auch Version B verwenden, was bedeutet Ändern der require-Anweisungen in C, D und E. Also eine einzige Änderung in einem Modul bedeutet, dass ich alles andere umkehren muss.
Ich sollte beachten, dass der Hauptgrund dafür ist, dass ich alte Versionen behalten muss. Dies sind kleine Microsites, und eine Site könnte mit A - E gebaut werden und die nächste könnte mit A '- E' gebaut werden, aber ich muss trotzdem in der Lage sein, beides unabhängig voneinander zu erstellen. Auch wenn sich die Änderung von A 'nicht auf die API auswirkt, möchte ich nicht jedes einzelne Projekt, das jemals mit jeder einzelnen Dateiänderung erstellt wurde, erneut testen.
Ich dachte über eine separate pro-Projekt-Datei, die erforderlich sein könnte in und es erfordert dann alle versionierten Module für dieses Projekt, aber das ist eine zirkuläre Abhängigkeit.
Wenn es darauf ankommt, verwende ich Gulp und Browserify, um die endgültige JS-Datei zu erstellen.
Ich habe über die Verwendung von Fallbacks nachgedacht, aber verschiedene Versionen sind nicht notwendigerweise * einen älteren abzulehnen. Der gleiche Grund, dass es nicht immer eine API-Änderung ist. Zum Beispiel muss ein Logger möglicherweise eine zusätzliche Protokollierungsquelle für einige Projekte hinzufügen, oder ein Datenmodul muss möglicherweise anders organisiert werden. Die externe API ändert sich nicht, und man ist nicht im Sinne der Versionierung "neuer" oder "besser", es ist einfach anders. – mherzig
Ich denke, ein Protokollierungsmodul sollte nicht von seinen Quellen oder Zielen abhängen. Es könnte eine konfigurierbare Schnittstelle bereitstellen, und der Haupteintrag der Anwendung (der für jedes Projekt unterschiedlich ist) kann die Liste der Protokollierungsquellen oder -ziele bereitstellen. –