2016-06-01 23 views
1

Das Problem: Wir teilen den Code von SPA in mehrere Bündel. Jedes Paket hat eine eigene Version. In prod wollen wir verschiedene Versionen von Bundles verwenden, basierend auf der Konfiguration des Benutzers. Daher müssen wir sicherstellen, dass die Modul-IDs zwischen den Versionen (für dasselbe Modul) nicht geändert werden.Webpack: Wie man Modul-IDs überschreibt?

Eine der möglichen Lösungen besteht darin, in config zu definieren und Datensätze unter VC zu speichern. Aber die Datei wächst immer, wenn wir unsere Bibliotheken aktualisieren.

Eine andere Option besteht darin, zu überschreiben, wie Webpack Modul-IDs in Compilation.prototype.applyModuleIds generiert (z. B. können wir relativen Pfad zu Modul als Modul-ID verwenden).

Ist dies sicher zu tun oder wir haben gerade etwas verpasst und es gibt einige Webpack-Funktion oder Plugin für unser Problem?

Antwort

1

Es scheint vollkommen sicher zu sein, dies in Webpack 1.9.x zu tun. YMMV mit Webpack 2, aber das würde ich aufgrund der einfachen Art der Methode nicht erwarten.

Solange die Bedingung erfüllt ist, dass das gleiche Modul immer die gleiche ID erhält, funktioniert das Webpack wie gewohnt. Ich landete die folgende Implementierung mit:

var md5 = require('md5'); 

module.exports = function handleWebpackModuleSymlinks(Compilation) { 
    Compilation.prototype.applyModuleIds = function() { 
    this.modules.forEach(function(module) { 
     if (module.id === null) { 
     module.id = md5(module.userRequest); 
     } 
    }, this); 
    }; 
} 

Diese Modul Hashes erzeugt den aufgelösten absoluten Pfad zu jeder Datei basierte weg, das Verhalten ist, das aus der Box funktionieren soll, aber ich brauchte, um mich zu implementieren aufgrund der Verwendung von Symlinked node_modules während der Entwicklung warf seine Standard-Pfad Vergleichslogik. Sie könnten wahrscheinlich Regexes verwenden, um die Versionskomponente Ihrer Ressourcenpfade vor dem Hashing zu ersetzen, um den beabsichtigten Effekt zu erzielen.