Encontré un archivo llamado "degit" en el código fuente de Remotion.
Remotion te ayuda a crear videos mediante programación.
En este artículo, veremos los siguientes conceptos:
Recuerdo haber visto "degit" mencionado en uno de los archivos Léame en el código abierto, pero no podía recordar qué repositorio era, así que busqué en Google lo que significa degit y encontré este paquete degit npm.
En términos simples, puedes usar degit para hacer rápidamente una copia de un repositorio de Github descargando solo la última confirmación
en lugar de todo el historial de git.
Visite el paquete oficial npm de degit para leer más sobre este paquete.
También puedes usar este paquete degit para descargar repositorios de Gitlab o Bitbucket, por lo que no se limita solo a los repositorios de Github.
# 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
Aquí hay un ejemplo de uso en 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'); });
Para entender cómo construir una función degit simple, analicemos el código del archivo degit.ts de Remotion. Este archivo implementa una versión básica de lo que hace el paquete degit npm: obtener el estado más reciente de un repositorio de GitHub sin descargar el historial completo.
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); }); }
Después de descargar el repositorio, es necesario extraer el contenido del tarball:
function untar(file: string, dest: string) { return tar.extract( { file, strip: 1, C: dest, }, [], ); }
La función principal degit une todo, manejando la creación de directorios, recuperando y extrayendo el repositorio:
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 se utiliza para crear
a directorios de forma recursiva.
Descubrí que remotion usa degit para descargar plantillas cuando ejecutas su comando de instalación:
npx create-video@latest
Este comando te pide que elijas una plantilla, aquí es donde entra en acción degit para descargar
la última confirmación de la plantilla seleccionada
Puedes comprobar este código en el paquete create-video como prueba.
Obtenga cursos gratuitos inspirados en las mejores prácticas utilizadas en código abierto.
Sitio web: https://ramunarasinga.com/
Linkedin: https://www.linkedin.com/in/ramu-narasinga-189361128/
Github: https://github.com/Ramu-Narasinga
Correo electrónico: [email protected]
Conozca las mejores prácticas utilizadas en código abierto.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3