Wie Webpack Dateien dynamisch importiert

php中世界最好的语言
Freigeben: 2018-03-17 15:28:01
Original
2820 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie Sie Dateien dynamisch mit Webpack importieren. Was sind die Vorsichtsmaßnahmen , damit Webpack Dateien dynamisch importiert?

Als Sie zum ersten Mal mit der Verwendung von Webpack begonnen haben, hatten viele Leute möglicherweise die Idee, dass Sie bei der Anforderung-Datei den statischen -String--Pfad nicht schreiben können, aber das ist so Verwenden Sie eine flexiblere Methode, z. B. die Definition einer -Variable , um zu bestimmen, welche Datei basierend auf den spezifischen Betriebsbedingungen erforderlich ist!

Zum Beispiel ist der Autor auf ein solches Bedürfnis gestoßen.

Damals wurde Vue-Router zur Entwicklung eines Verwaltungssystems verwendet. Das Verwaltungssystem selbst verfügt über ein Verzeichnisarray, und Vue-Router benötigt auch ein Routenkonfigurationsarray, und die beiden entsprechen genau . Damals dachte ich: Kann ich einfach ein Verzeichnis-Array verwalten und dann dynamisch ein Routen-Array generieren?

Also habe ich eine kleine Demo wie folgt implementiert:

// directory
let dir = [
 {
 name: 'a',
 path: '/a',
 componentPath: './a.vue'
 },
 { 
 ...
 }
];
let route = [];
for (let i = 0; i < dir.length; ++i) {
 let item = dir[i];
 route.push({
 path: item.path,
 component: r => require.ensure([], () => r(require(item.componentPath)), 'demo')
 });
}
Nach dem Login kopieren

Es ist ungefähr das Gleiche wie oben Quellcode zu diesem Zeitpunkt, daher habe ich wahrscheinlich ein Beispiel von Hand geschrieben. Ignorieren Sie einige mögliche Grammatikfehler.

Beim Ausführen dieses Codes treten Fehler auf: Kritische Abhängigkeiten.

Nachdem ich einige Informationen überprüft hatte, verstand ich ungefähr den Funktionsmechanismus von Webpack und verstand auch die Tatsache, dass: Es ist unmöglich, dynamische Webpack-Dateien zu verwenden.

Sie müssen wissen, dass Webpack ein Verpackungstool ist und die Zeit, in der es ausgeführt wird, vor der Kompilierung erfolgt. Unsere Idee ist es, zu bestimmen, welche Dateien zur Laufzeit benötigt werden Daher weiß Webpack nicht, welche Pakete gepackt werden sollen. Daher sind diese Dateien nicht gepackt, sodass require definitiv nicht erforderlich ist.

Nachdem wir diesen Mechanismus verstanden haben, sollten wir feststellen, dass die direkte Weitergabe des Pfads zur dynamischen Registrierung der Route eine unmögliche Lösung ist.

Was ist, wenn Sie Dateien dynamisch importieren möchten? Wir können einige kuriose Lösungen in Betracht ziehen, um das Land zu retten.

1. Bestimmen Sie den erforderlichen Pfad in der Vorkompilierungsphase.

Der Grund, warum wir dynamische Variablen zum Speichern von Pfadzeichenfolgen verwenden, liegt einfach darin, dass wir möchten, dass das Programm einige Aktionen für uns ausführt, z. B. das Zusammenfügen von Zeichenfolgen usw. In vielen Fällen haben diese Programme bei der Ausführung zur Laufzeit den gleichen Effekt wie bei der Ausführung während der Vorkompilierung. In unserem obigen Beispiel möchten wir beispielsweise einfach nicht zwei Tabellen manuell verwalten. Dann können wir beim Packen Dateien lesen und schreiben, um dynamisch Analysevorgänge durchzuführen, und das analysierte Routenarray in die angegebene Datei schreiben. Erreicht man damit nicht das Ziel?

2. Wie wäre es mit der direkten Übergabe des Komponentenobjekts ? Zum Beispiel die folgende Implementierungsmethode:

// directory
let dir = [
 {
 name: 'a',
 path: '/a',
 component: r => require.ensure([], () => r(require('./a.vue')), 'demo')
 
 },
 { 
 ...
 }
];
let route = [];
for (let i = 0; i < dir.length; ++i) {
 let item = dir[i];
 route.push({
 path: item.path,
 component: item.component
 });
}
Nach dem Login kopieren
Diese Lösung ist hauptsächlich für unser Beispiel gedacht, kann aber natürlich auch eine Inspiration für andere Situationen sein.

Aber schließlich ist dies eine Kompromisslösung. Wir müssen eines verstehen: Während der Vorkompilierungsphase muss das Webpack klar wissen, welche Dateien importiert werden müssen, sonst ist keine Lösung möglich.

Übrigens gibt es im Internet auch ein Sprichwort: „require(path)“ Solange der Pfad keine reine Variable ist, wie „require('./root/' + path“), kann dies der Fall sein so kombiniert? Ich habe es hier in der Funktion require.ensure versucht, aber es funktioniert nicht. Vielleicht benutze ich es falsch.

Eine weitere Sache: Bei der Übergabe von Komponentenobjekten scheint es einige Probleme bei der Übergabe über Dateien hinweg zu geben. Ich habe das Verzeichnis-Array, das Routen-Array und den Parsing-Prozess jedenfalls in einer Datei geschrieben. Möglicherweise ist es ein Problem, relative Pfade zum Parsen in verschiedenen Dateien zu verwenden. Sie müssen bei der Verwendung darauf achten.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.

Empfohlene Lektüre:

Detaillierte Erklärung der Verwendung von Babel

JS-Imitation des klassischen legendären Spiels

Das obige ist der detaillierte Inhalt vonWie Webpack Dateien dynamisch importiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage