JavaScript Webpack require.context

Hendoul

Lt. Commander
Registriert
Apr. 2008
Beiträge
2.047
Hi :)

Ich schau mir grad Code wie diesen hier an:
Javascript:
require.context('../src/general', true, /^mypattern$/));

Und frage mich woher der Code weiss, dass require.context von webpack kommt? Ich sehe keinen import in diesem File der darauf hindeuten würde.

In diesem File hat es diese imports:
import '../src/app.module.ng1';
und dann noch etliche Imports von den AngularJS modulen wie z.B. :
import '../src/xyz/xyz.module';

Also muss das require irgendwie global verfügbar sein? Aber auch das müsste ja von jemandem gemacht worden sein? Manuell oder automatisch?

Es ist webpack 5.75 im Einsatz.
 
Hendoul schrieb:
Und frage mich woher der Code weiss, dass require.context von webpack kommt?
Das läuft andersherum. Webpack baut den Code zusammen, und kann deshalb auch beliebige Variablen (z.B. process.env ) oder Funktionen (z.B. require) in den Code injecten.

Ohne ein entsprechendes Build Tool ist dein Code also nicht funktionsfähig.
 
Danke für die Erklärung :)

Ok, dann darf man also davon ausgehen, dass alle Files die Webpack 'anfasst' auch über dieses require verfügen?

Was aber wenn jetzt nach einem Upgrade von Angular 14 -> 15 dieses require.context urplötzlich nicht mehr erkannt wir?
 
Hendoul schrieb:
Was aber wenn jetzt nach einem Upgrade von Angular 14 -> 15 dieses require.context urplötzlich nicht mehr erkannt wir?
Ich weiß nicht genau, wann und wo es entfernt wurde. Aber du bist scheinbar nicht der einzige mit dem Problem. Die Antwort lautet wohl import.meta.webpackContext.

https://stackoverflow.com/questions...xt-to-import-meta-webpackcontext-is-causing-t

Und hierhin verlinkt dann die Lösung:
https://stackoverflow.com/questions...-import-meta-webpackcontext/75060174#75060174
 
Da habe ich soviel gegoogled, aber über diese Threads bin ich nicht gestolpert, danke!
Tatsächlich funktioniert es nun auch bei mir wenn ich die import.meta.webpackContext Syntax verwende.

Kann mir allerdings nicht erklären warum require.context nicht mehr funktionieren sollte. Sowas hätte ja irgendwo als Breaking Change aufgeführt werden müssen. Somit muss es an irgendwas anderem liegen.
 
Dem Kommentar im Code nach war die Änderung wohl schon länger geplant. Aber was "offizielles" habe ich auf die Schnelle auch nicht gefunden
 
Zurück
Oben