KĂŒrzlich wurde in Node.js die UnterstĂŒtzung fĂŒr ECMAScript-Module angekĂŒndigt , und in ES2020 wurde die UnterstĂŒtzung fĂŒr dynamische Importe eingefĂŒhrt. In diesem Artikel werde ich ĂŒber die Implementierung des offensichtlichen Falls der Verwendung dynamischer Importe sprechen - mit unbekannten Verzeichnisnamen im Voraus.

Ausgabe
Oft beobachte ich in Projekten ungefÀhr folgende Verzeichnisstruktur:
$ tree . âââ modules â âââ a â â âââ index.ts â âââ b â â âââ index.ts â âââ c â âââ bobule.ts âââ index.ts âââ package.json
und den Inhalt von index.ts
:
import a from './modules/a'; import b from './modules/b'; import c from './modules/c/bobule.ts'; export default { module: a, dopule: b, bobule: c };
Und dann irgendwo auf der obersten Ebene gibt es einen anderen index.ts, der diesen index.ts importiert, der importiert ...
Ich wĂŒrde gerne so etwas wie top-level index.ts
import modules from './modules/*/*'
aber aus der Box heraus wird dies nicht unterstĂŒtzt, was in mir einen unbĂ€ndigen Wunsch weckte, meine zu verarschen KrĂŒcke, Fahrrad, Rahmen Zweifellos eine nĂŒtzliche, originelle und sehr notwendige Lösung fĂŒr dieses Problem.
Dynamische Importe
Der Hauptvorteil des Importierens von Dynamik gegenĂŒber Statik ist die funktionale Form, die das Laden von Modulen nach Bedingung ermöglicht. Es funktioniert so:
fs
diesem Design ein wenig fs
hinzufĂŒgen, können Sie mit dynamischen Importen alle Dateien aus Unterverzeichnissen auf jeder Ebene abrufen.
PHP inspiriert
Die Idee des Autoloads ist nicht neu und wird in PHP aus architektonischen und historischen GrĂŒnden aktiv verwendet, aber nichts hindert mich daran, meine eigenen Schwierigkeiten zu schaffen und sie heldenhaft zu ĂŒberwinden. Daher habe ich versucht, einen Autoload-Abschnitt in package.json zu erstellen und ein Tool zu erstellen, das den Modulnamen anhand des SchlĂŒssels und den Dateipfad anhand des folgenden Werts liest:
// package.json { "autoload": { "modules": ["modules", "*", "index.ts"] "bobules": ["*", "*", "bobule.ts"], } }
Bei der Verwendung von typescipt ist es Àrgerlich, dass sich die Erweiterungen nach dem Erstellen der Anwendung Àndern und es mehr als zwei davon gibt: ts|js|mjs|tsx
Sie können dies also sofort berĂŒcksichtigen, indem Sie alle verfĂŒgbaren Optionen auflisten und nur die benötigten herunterladen:
// package.json { "autoload": { "modules": ["modules", "*", "index.ts|js"] "bobules": ["*", "*", "bobule.ts|js"], } }
Implementierung
Die folgenden FĂ€lle werden erhalten:
f(projectRoot, ['modules', '*', 'index.js|ts'], moduleName = 'default')
// f(projectRoot, ['modules', '*', 'index.js|ts'], moduleName = 'default')
die Module auf den vom Benutzer angegebenen Pfadf(projectRoot)
// Laden von Modulen aus package.json, Modulnamen (SchlĂŒssel im Autoload-Bereich) werden in diesem Fall vom dritten Argument bereits "under the hood" ĂŒbergeben.
Das Erstellen von Pfaden ist eine triviale Aufgabe. Wir gehen einfach das Array durch und wĂ€hlen alle Unterverzeichnisse fĂŒr die Sterne aus. Wenn das Array endet, geben Sie es zurĂŒck und laden die Module in das Array. Infolgedessen habe ich einige Abende lang diese Lösung fĂŒr mich entworfen:

Warum ist das alles?
Es schien mir, dass das Thema dynamischer Importe zu Unrecht sehr schlecht behandelt wurde und alle diese Bibliotheken in npm nicht leicht aktualisiert wurden (oder sah ich schlecht aus?). Und die Technologie ermöglicht es Ihnen, ohne Registrierung und SMS auszukommen. Ich hoffe, dass der Quellcode des Projekts und meine VerwendungsfĂ€lle Sie fĂŒr die Verwendung in Ihren Projekten interessieren und die CodevervielfĂ€ltigung durch Verschrauben leicht reduzieren KrĂŒcke, Fahrrad, Rahmen zweifellos ein nĂŒtzlicher Helfer.
Links, Beweise, Ăbersetzungen:
- ECMAScript-Module
- Dynamische Importe:
Der Quellcode fĂŒr diesen fehlerlosen Code ist hier:
https://github.com/Melodyn/npm-dynamicimport/blob/master/lib/index.js#L93-L120
Erhalten Sie hier eine unschÀtzbare Benutzererfahrung:
https://www.npmjs.com/package/@melodyn/dynamicimport
Die Katze ist hier:
(^ âÏâ ^)