Element verwendet Skripte, um automatisch neue Komponenten zu erstellen

Element verwendet Skripte, um automatisch neue Komponenten zu erstellen

Hintergrund

Verwenden Sie in Unternehmensprojekten immer noch „Neue Seite erstellen“ => „Inhalt zur Seite hinzufügen“, wenn Sie auf neue Anforderungen stoßen, z. B. „Vue-Vorlage“ => „Routing hinzufügen“. Finden Sie das nicht lästig? Wenn ja, warum probieren Sie nicht den automatisierten Build aus? Er ist so gut!

Wie funktioniert die automatisierte Konstruktion von element-ui?

An Open-Source-Projekten, insbesondere an der Entwicklung von UI-Bibliotheken, arbeiten zu viele Leute zusammen und jeder hat andere Programmiergewohnheiten. Darüber hinaus umfasst jede Komponente in der UI-Bibliothek auch Mehrsprachigkeit, Unit-Tests, Routing, Komponenten-Readme.md-Dokumente und andere Dateien. Daher wäre es zu mühsam, diese jedes Mal langsam zu erstellen, und wenn mehrere Personen öffentliche Dateien wie Routing-Dateien ändern, führt dies zu zahlreichen Konflikten. Daher gibt es in Open-Source-Projekten viele Skripte zum automatischen Generieren bestimmter Dateien.

Makefile

Im Stammverzeichnis des Element-UI-Projekts befindet sich ein Makefile. Die Funktion jedes Befehls steht in den Kommentaren. Windows-Benutzer müssen den Befehl „make“ verwenden, um das herunterzuladende Skript auszuführen. Mac-Benutzer brauchen dies nicht.

@# Der Standardkommentar #wird im Protokoll ausgegeben, @# hingegen nicht. Die Rolle von PHONY: Ignorieren Sie die Prüfung auf Konflikte mit den Verzeichnissen dist und test im folgenden Skriptbefehl, was bedeutet, dass der Befehl trotzdem ausgeführt wird. PHONY: dist test

@# Beim Ausführen des Make-Befehls wird standardmäßig das Hilfeskript ausgeführt: help

@# Das Ausführen von „make build-theme“ bedeutet, dass das Skript „npm run build:theme“ ausgeführt wird.
@#: Der auszuführende Befehl steht vor dem Doppelpunkt, und die erste Zeile nach dem Doppelpunkt sollte ein Tabulator sein, gefolgt vom Skriptbefehl @#. Das heißt, das Folgende ist „tab+npm npm build: theme“
# alle Themen erstellen
@# Der obige Kommentar zum Build-Theme ist im Screenshot unten zu sehen, und „Build-Theme“ wird im Protokoll ausgegeben: 
 npm führt build:theme aus
installieren:
 npm installieren
Entwickler:
 npm-Ausführung dev
@# $() ist die zu verwendende Funktion. @# $@ ist der aktuelle Befehl selbst, z. B. „make new“, $@ ist neu.
@# MAKECMDGOALS ist eine spezielle Variable, die die durch die Befehlszeilenparameter angegebene Zielliste aufzeichnet. Das heißt, mit dieser Variable können wir die Befehlszeilenparameter abrufen. @# Wenn wir beispielsweise eine neue Komponente erstellen, verwenden wir das Skript `make new wailen`. MAKECMDGOALS ist gleich wailen
@# Filter-out-Antifilterfunktion, filtert alle Inhalte heraus, die $@ in $(MAKECMDGOALS) enthalten. @# Kombiniert mit dem Inhalt von new.js besteht die Bedeutung des folgenden Skripts darin, eine neue Komponente zu erstellen und den Komponentennamen zu übergeben. Der Komponentenname darf nicht „new“ sein. Wenn der Komponentenname „new“ ist, können Sie den folgenden Screenshot „new“ sehen:
 Knotenbuild/bin/new.js $(Filter-out $@,$(MAKECMDGOALS))
@# Einige Skripte wurden ausgelassen. Wenn Sie interessiert sind, können Sie die Hilfe zum Quellcode lesen:
 @echo " \033[35mmake\033[0m \033[1mBefehlsanweisungen\033[0m"
 @echo " \033[35mmake install\033[0m\t\033[0m\t\033[0m\t\033[0m\t--- Abhängigkeiten installieren"
 @echo " \033[35mmake new <component-name> [Chinesischer Name]\033[0m\t--- Erstellen Sie ein neues Komponentenpaket. Zum Beispiel 'make new button button'"
 @echo " \033[35mmake dev\033[0m\t\033[0m\t\033[0m\t\033[0m\t--- Entwicklungsmodus"
 @echo " \033[35mmake dist\033[0m\t\033[0m\t\033[0m\t\033[0m\t--- Kompiliere das Projekt und erzeuge die Zieldatei"
 @echo " \033[35mmake deploy\033[0m\t\033[0m\t\033[0m\t\033[0m\t--- Demo bereitstellen"
 @echo " \033[35mmake pub\033[0m\t\033[0m\t\033[0m\t\033[0m\t--- In npm veröffentlichen"
 @echo " \033[35mmake new-lang <lang>\033[0m\t\033[0m\t\033[0m\t--- Fügt der Site eine neue Sprache hinzu. Zum Beispiel 'make new-lang fr'"

# Kommentarausgabe

Filtern Sie das neue Schlüsselwort. Wenn der eingehende Parameter neu ist, filtern Sie ihn heraus.

Wenn Sie make nicht verwenden möchten, können Sie das Node-Skript natürlich auch direkt ausführen. Beispielsweise entspricht der Komponentenname „make new“ dem Komponentennamen „node build/bin/new.js“.

neu.js

new.js ist die Kerndatei der Automatisierung. Lassen Sie uns zunächst darüber nachdenken. Das Erstellen einer Komponentendatei umfasst nicht mehr als zwei Schritte.

  • Erstellen einer Datei
  • Inhalt hinzufügen

Datei speichern

Hauptsächlich über das File-Save-Paket, um Dateien zu erstellen und Inhalte hinzuzufügen. Schauen wir uns zunächst die API an

const fileSave = erfordern('Datei speichern');
const Inhalt = "const fs = erfordern('fs');"
const callback = () => { console.log('Skriptausführung') }
fileSave('Dateipfad')
   .write('Dateiinhalt wie der obige Inhalt', 'utf8', Rückruf) // Erfolgreiches Schreiben des Inhalts löst den Rückruf aus.write('Weiter Inhalt hinzufügen', 'utf8')
   .end('\n') // Dateivorgang endet mit einer leeren Zeile

Dadurch wird die folgende Datei generiert

Weitere Dokumentation finden Sie unter file-save

In Element-UI wird ein Files-Array-Objekt verwendet, um den Dateinamen und den Codeinhalt zu verwalten, die erstellt werden müssen.

Auf diese Weise können Sie durch direktes Loopen von Dateien die entsprechenden Dateien erstellen.

// Paket erstellen
// Von der Komponente generiertes Verzeichnis const PackagePath = path.resolve(__dirname, '../../packages', componentname);
Dateien.fürJedes(Datei => {
  fileSave(Pfad.Join(Paketpfad, Datei.Dateiname))
    .write(Datei.Inhalt, 'utf8')
    .ende('\n');
});

Änderung referenzierter Ressourcendateien

Darüber hinaus müssen Sie nach dem Erstellen einer Komponente normalerweise die entsprechenden Stellen ändern, an denen auf die Komponente verwiesen werden muss, z. B. die Routing-Konfigurationsdatei. Wir können entsprechende Routen auch durch Dateispeichern hinzufügen. Beim Speichern der Datei selbst wird der Inhalt der vorherigen Datei überschrieben, d. h., die Datei wird nach dem Löschen neu erstellt. Wenn Sie den ursprünglichen Inhalt ergänzen möchten, müssen Sie daher den Inhalt der Originaldatei abrufen und anschließend den neuen Inhalt hinzufügen. Das können wir tun:

const fileSave = erfordern('Datei speichern');
const fs = erfordern('fs');

const Inhalt = `const fileSave = erforderlich('Datei speichern'); `
const oldCode = fs.readFileSync('./demo.js')
DateiSpeichern('demo.js')
  .write(alterCode+Inhalt, 'utf8')
  .ende('\n')

Das heißt, lesen Sie den alten Inhalt der Datei über das fs-Modul und fügen Sie ihn dann zusammen. Element-ui macht Folgendes:

fs.createWriteStream

Das Prinzip der Dateispeicherung besteht darin, die API fs.createWriteStream zu kapseln.
Erklären Sie kurz die Verwendung

const fs = erfordern('fs')

//Erstellen Sie ein Objekt der beschreibbaren Stream-Klasse fs.WriteStream, geerbt von <stream.Writable>
const writer = fs.createWriteStream('createStream.js', { // Datei suchen und erstellen, falls sie nicht existiert // Der Standardwert ist w. Beim Schreiben von Daten durch Aufrufen der Methode writer.write wird der gesamte Inhalt der Datei direkt überschrieben.
    // Dadurch werden alle vorherigen Inhalte der Datei gelöscht und neue Daten geschrieben. Flags: „w“
})


//Daten in den Stream schreiben writer.write('Neuer Inhalt dieser Datei')

Der Quellcode von file-save kann im folgenden Pseudocode angezeigt werden.

const savefs = {}
savefs._create_dir = Funktion (fp, Optionen) {
  mkdirp.sync(fp, opts);
}
savefs.wstream = Funktion (Datei) {
  var ws = fs.createWriteStream(Datei);
  dieser.writer = ws;
  gib dies zurück;
}
savefs.write = Funktion(Chunk, Kodierung, cb) {
  ...
}

savefs.end = Funktion(Chunk, Kodierung, cb) {
  ...
}

savefs.finish = Funktion(cb) {
  ...
}

savefs.error = Funktion(cb) {
  ...
}
exportiere { savefs }

Natürlich können wir die fs.writeFile-API von Node verwenden, um Dateien direkt zu erstellen.

fs.writeFile('Dateipfad', 'zu schreibender Inhalt', ['Kodierung'], 'Rückruffunktion');

Sie können feststellen, dass die Parameter die gleichen sind wie beim Speichern von Dateien

Zusammenfassen

Letztendlich ist die automatisierte Komponentenerstellung nichts anderes als das Hinzufügen von Inhalten zu zwei Kernerstellungsdateien. Diese beiden Vorgänge können über das Dateispeicherpaket erreicht werden. Anschließend können wir den Pfad und den Inhalt der generierten Dateien in Kombination mit unserem eigenen Geschäft konfigurieren und die Verweise einiger öffentlicher Dateien auf die neuen Dateiressourcen ändern. Glauben Sie, dass das Schreiben von Skripten in Node viel interessanter ist als das Schreiben von Backends?

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel zur Verwendung von Elementskripten zum automatischen Erstellen neuer Komponenten. Weitere Inhalte zu Elementskripten zum automatischen Erstellen neuer Komponenten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Beispielcode zum Erstellen eines benutzerdefinierten Baums basierend auf Vue Element

<<:  Eine kurze Diskussion über HTML-geordnete Listen, ungeordnete Listen und Definitionslisten

>>:  Reines CSS-Dropdown-Menü

Artikel empfehlen

Was tun, wenn der Auto-Increment-Primärschlüssel in MySQL aufgebraucht ist?

Im Vorstellungsgespräch sollten Sie folgende Szen...

Detaillierte Erklärung der Schritte zum Erstellen eines Vue-Projekts mit Vue-cli

Zuerst müssen Sie Vue-cli installieren: npm insta...

Lösung für das Fehlen einer chinesischen Eingabemethode in Ubuntu

Es gibt keine Lösung für die chinesische Eingabem...

Schritte für Docker zum Erstellen eines privaten Lagerhafens

Hafen Harbor ist eine Open-Source-Lösung zum Erst...

Anzeigen und Analysieren des MySQL-Ausführungsstatus

Wenn Sie den Eindruck haben, dass ein Problem mit...

Detaillierte Schritte zur Remotebereitstellung einer MySQL-Datenbank unter Linux

Remotebereitstellung der MySQL-Datenbank unter Li...

CSS implementiert die Bottom-Tapbar-Funktion

Viele Mobiltelefone verfügen mittlerweile über di...

Mybatis implementiert Details zum Abfangen und Ändern von SQL-Abfragen

Vorwort Eine der Funktionen eines Interceptors be...

Einführung mehrerer benutzerdefinierter Schriftarten in CSS3

Heute habe ich ein Problem in HTML gefunden. Es s...

Ein Artikel zum Lösen des Echarts-Kartenkarussell-Highlights

Inhaltsverzeichnis Vorwort Aufgabenliste tun Sie ...

Erste Schritte mit CSS3-Animation in 10 Minuten

Einführung Mit Animation können Sie mithilfe von ...