Ich habe im Remotion-Quellcode eine Datei namens „degit“ gefunden.
Remotion hilft Ihnen, Videos programmatisch zu erstellen.
In diesem Artikel werden wir uns mit den folgenden Konzepten befassen:
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
anstelle des gesamten Git-Verlaufs.
Besuchen Sie das offizielle npm-Paket für degit, um mehr über dieses Paket zu lesen.
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
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'); });
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.
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';
export function fetch(url: string, dest: string) { return new Promise((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 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, }, [], ); }
Die Hauptfunktion 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); };
mkdirp wird verwendet, um
zu erstellen
a Verzeichnisse rekursiv.
Ich habe festgestellt, dass Remotion Degit zum Herunterladen von Vorlagen verwendet, wenn Sie den Installationsbefehl ausführen:
npx create-video@latest
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.
Erhalten Sie kostenlose Kurse, die von den Best Practices inspiriert sind, die in Open Source verwendet werden.
Website: https://ramunarasinga.com/
Linkedin: https://www.linkedin.com/in/ramu-narasinga-189361128/
Github: https://github.com/Ramu-Narasinga
E-Mail: [email protected]
Lernen Sie die Best Practices kennen, die in Open Source verwendet werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3