Heim > Web-Frontend > js-Tutorial > Hauptteil

Verwenden Sie degit, um eine Vorlage in Ihrem CLI-Tool herunterzuladen.

王林
Freigeben: 2024-08-17 06:51:32
Original
424 Leute haben es durchsucht

Ich habe im Remotion-Quellcode eine Datei namens „degit“ gefunden.
Mit Remotion können Sie Videos programmatisch erstellen.

In diesem Artikel werden wir uns mit den folgenden Konzepten befassen:

  1. Was ist Degit?
  2. Erstellen Sie eine einfache Degit-Funktion, die von der Degit-Datei von Remotion inspiriert ist

Was ist Degit?

Ich erinnere mich, dass „degit“ in einer der Readmes in der Open Source erwähnt wurde, aber ich konnte mich nicht erinnern, um welches Repository es sich handelte, also habe ich gegoogelt, was ein degit bedeutet, und habe dieses degit npm-Paket gefunden.

Einfach ausgedrückt: Sie können degit verwenden, um schnell eine Kopie eines Github-Repositorys zu erstellen, indem Sie nur das neueste Commit herunterladen
statt der gesamten Git-Historie.

Besuchen Sie das offizielle npm-Paket für degit, um mehr über dieses Paket zu erfahren.

Sie können dieses Degit-Paket auch zum Herunterladen von Repos von Gitlab oder Bitbucket verwenden, sodass es nicht nur auf Github-Repositories beschränkt ist.

# download from GitLab
degit gitlab:user/repo

# download from BitBucket
degit bitbucket:user/repo

degit user/repo
# these commands are equivalent
degit github:user/repo
Nach dem Login kopieren

Hier ist ein Beispiel für die Verwendung in Javascript:

const degit = require('degit');

const emitter = degit('user/repo', {
    cache: true,
    force: true,
    verbose: true,
});

emitter.on('info', info => {
    console.log(info.message);
});

emitter.clone('path/to/dest').then(() => {
    console.log('done');
});
Nach dem Login kopieren

Erstellen Sie eine einfache Degit-Funktion, die von der Degit-Datei von Remotion inspiriert ist

Um zu verstehen, wie man eine einfache Degit-Funktion erstellt, analysieren wir den Code aus der degit.ts-Datei von Remotion. Diese Datei implementiert eine Basisversion dessen, was das degit npm-Paket tut: den neuesten Status eines GitHub-Repositorys abrufen, ohne den vollständigen Verlauf herunterzuladen.

1. Verwendete Importe

import https from 'https';
import fs from 'node:fs';
import {tmpdir} from 'node:os';
import path from 'node:path';
import tar from 'tar';
import {mkdirp} from './mkdirp';
Nach dem Login kopieren
  • https: Wird verwendet, um eine Netzwerkanforderung zum Abrufen des Repositorys zu stellen.
  • fs: Interagiert mit dem Dateisystem, z. B. beim Schreiben der heruntergeladenen Dateien.
  • tmpdir: Stellt den temporären Verzeichnispfad des Systems bereit.
  • Pfad: Behandelt und transformiert Dateipfade.
  • tar: Extrahiert den Inhalt des Tarballs (komprimierte Datei).
  • mkdirp: Eine Hilfsfunktion zum rekursiven Erstellen von Verzeichnissen, bereitgestellt in einer separaten Datei.

2: Abrufen des Repositorys

export function fetch(url: string, dest: string) {
    return new Promise<void>((resolve, reject) => {
        https.get(url, (response) => {
            const code = response.statusCode as number;
            if (code >= 400) {
                reject(
                    new Error(
                        `Network request to ${url} failed with code ${code} (${response.statusMessage})`,
                    ),
                );
            } else if (code >= 300) {
                fetch(response.headers.location as string, dest)
                    .then(resolve)
                    .catch(reject);
            } else {
                response
                    .pipe(fs.createWriteStream(dest))
                    .on('finish', () => resolve())
                    .on('error', reject);
            }
        }).on('error', reject);
    });
}
Nach dem Login kopieren
  • URL-Verarbeitung: Die Funktion prüft, ob die Anfrage erfolgreich ist (Statuscodes unter 300). Wenn es sich um eine Weiterleitung handelt (Codes zwischen 300 und 399), folgt sie der neuen URL. Wenn es sich um einen Fehler handelt (Codes 400+), wird das Versprechen abgelehnt.
  • Dateispeicherung: Das Repository wird heruntergeladen und mit fs.createWriteStream im Zielpfad gespeichert.

3: Extrahieren des Repositorys

Nach dem Herunterladen des Repositorys ist es notwendig, den Inhalt des Tarballs zu extrahieren:

function untar(file: string, dest: string) {
    return tar.extract(
        {
            file,
            strip: 1,
            C: dest,
        },
        [],
    );
}
Nach dem Login kopieren
  • Tar-Extraktion: Diese Funktion extrahiert den Inhalt der .tar.gz-Datei in das angegebene Zielverzeichnis.

4: Alles zusammenfügen

Die Hauptfunktion von degit verbindet alles miteinander und kümmert sich um die Verzeichniserstellung, das Abrufen und Extrahieren des Repositorys:

export const degit = async ({
    repoOrg,
    repoName,
    dest,
}: {
    repoOrg: string;
    repoName: string;
    dest: string;
}) => {
    const base = path.join(tmpdir(), '.degit');
    const dir = path.join(base, repoOrg, repoName);
    const file = `${dir}/HEAD.tar.gz`;
    const url = `https://github.com/${repoOrg}/${repoName}/archive/HEAD.tar.gz`;

    mkdirp(path.dirname(file));
    await fetch(url, file);

    mkdirp(dest);
    await untar(file, dest);
    fs.unlinkSync(file);
};
Nach dem Login kopieren

mkdirp wird zum Erstellen verwendet
a Verzeichnisse rekursiv.

Abschluss:

Ich habe herausgefunden, dass Remotion Degit zum Herunterladen von Vorlagen verwendet, wenn Sie den Installationsbefehl ausführen:

npx create-video@latest
Nach dem Login kopieren

Mit diesem Befehl werden Sie aufgefordert, eine Vorlage auszuwählen. Hier kommt degit zum Herunterladen ins Spiel
das letzte Commit der ausgewählten Vorlage

Sie können diesen Code im Paket „create-video“ als Beweis überprüfen.

Use degit to download a template in your CLI tool.

Erhalten Sie kostenlose Kurse, die von den Best Practices inspiriert sind, die in Open Source verwendet werden.

Über mich:

Website: https://ramunarasinga.com/

Linkedin: https://www.linkedin.com/in/ramu-narasinga-189361128/

Github: https://github.com/Ramu-Narasinga

E-Mail: ramu.narasinga@gmail.com

Lernen Sie die Best Practices kennen, die in Open Source verwendet werden.

Referenzen:

  1. https://github.com/Rich-Harris/degit
  2. https://github.com/remotion-dev/remotion/blob/main/packages/create-video/src/degit.ts
  3. https://github.com/remotion-dev/remotion/blob/c535e676badd055187d1ea8007f9ac76ab0ad315/packages/create-video/src/init.ts#L109
  4. https://github.com/remotion-dev/remotion/blob/main/packages/create-video/src/mkdirp.ts

Das obige ist der detaillierte Inhalt vonVerwenden Sie degit, um eine Vorlage in Ihrem CLI-Tool herunterzuladen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!