"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Utilice degit para descargar una plantilla en su herramienta CLI.

Utilice degit para descargar una plantilla en su herramienta CLI.

Publicado el 2024-11-02
Navegar:455

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:

  1. ¿Qué es Degit?
  2. Cree una función de dígitos simple inspirada en el archivo de dígitos de Remotion

¿Qué es el dégito?

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');
});

Cree una función de dígitos simple inspirada en el archivo de dígitos de Remotion

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.

1. Importaciones utilizadas

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';
  • https: Se utiliza para realizar una solicitud de red para recuperar el repositorio.
  • fs: interactúa con el sistema de archivos, como escribir los archivos descargados.
  • tmpdir: proporciona la ruta del directorio temporal del sistema.
  • ruta: maneja y transforma las rutas de los archivos.
  • tar: Extrae el contenido del tarball (archivo comprimido).
  • mkdirp: una función auxiliar para crear directorios de forma recursiva, proporcionada en un archivo separado.

2: Obteniendo el repositorio

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);
    });
}
  • Manejo de URL: la función verifica si la solicitud se realizó correctamente (códigos de estado inferiores a 300). Si es una redirección (códigos entre 300 y 399), sigue la nueva URL. Si es un error (códigos 400), rechaza la promesa.
  • Guardado de archivos: el repositorio se descarga y guarda en la ruta de destino usando fs.createWriteStream.

3: Extrayendo el repositorio

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,
        },
        [],
    );
}
  • Extracción de tar: esta función extrae el contenido del archivo .tar.gz en el directorio de destino especificado.

4: Poniéndolo todo junto

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.

Conclusión:

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.

Use degit to download a template in your CLI tool.

Obtenga cursos gratuitos inspirados en las mejores prácticas utilizadas en código abierto.

Acerca de mí:

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.

Referencias:

  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
Declaración de liberación Este artículo se reproduce en: https://dev.to/ramunarasinga/use-degit-to-download-a-template-in-your-cli-tool-6hg?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

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