Gunakan degit untuk memuat turun templat dalam alat CLI anda.

王林
Lepaskan: 2024-08-17 06:51:32
asal
640 orang telah melayarinya

Saya menjumpai fail bernama "degit" dalam kod sumber Remotion.
Remotion membantu anda membuat video secara terprogram.

Dalam artikel ini, kita akan melihat konsep berikut:

  1. Apakah Degit?
  2. Bina fungsi degit ringkas yang diilhamkan oleh fail degit Remotion

Apakah Degit?

Saya masih ingat melihat "degit" yang disebut dalam salah satu Readmes dalam sumber terbuka, tetapi saya tidak dapat mengingat repositori mana itu jadi saya mencari di google maksud degit dan menemui pakej npm degit ini.

Secara ringkas, Anda boleh menggunakan degit untuk membuat salinan repositori Github dengan cepat dengan hanya memuat turun komit terkini
bukannya keseluruhan sejarah git.

Lawati pakej npm rasmi untuk degit untuk membaca lebih lanjut tentang pakej ini.

Anda boleh menggunakan pakej degit ini untuk memuat turun repo daripada Gitlab atau Bitbucket juga supaya ia tidak terhad kepada repositori Github sahaja.

# 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
Salin selepas log masuk

Berikut ialah contoh penggunaan dalam 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');
});
Salin selepas log masuk

Bina fungsi degit mudah yang diilhamkan oleh fail degit Remotion

Untuk memahami cara membina fungsi degit mudah, mari pecahkan kod daripada fail degit.ts Remotion. Fail ini melaksanakan versi asas perkara yang dilakukan oleh pakej degit npm: mengambil keadaan terkini repositori GitHub tanpa memuat turun sejarah penuh.

1. Import yang digunakan

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';
Salin selepas log masuk
  • https: Digunakan untuk membuat permintaan rangkaian untuk mengambil repositori.
  • fs: Berinteraksi dengan sistem fail, seperti menulis fail yang dimuat turun.
  • tmpdir: Menyediakan laluan direktori sementara sistem.
  • laluan: Mengendalikan dan mengubah laluan fail.
  • tar: Mengekstrak kandungan tarball (fail dimampatkan).
  • mkdirp: Fungsi pembantu untuk mencipta direktori secara rekursif, disediakan dalam fail berasingan.

2: Mengambil Repositori

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);
    });
}
Salin selepas log masuk
  • Pengendalian URL: Fungsi menyemak sama ada permintaan berjaya (kod status di bawah 300). Jika ia adalah ubah hala (kod antara 300 dan 399), ia mengikut URL baharu. Jika ini ralat (kod 400+), ia menolak janji itu.
  • Penyimpanan Fail: Repositori dimuat turun dan disimpan ke laluan terakhir menggunakan fs.createWriteStream.

3: Mengekstrak Repositori

Selepas memuat turun repositori, anda perlu mengekstrak kandungan tarball:

function untar(file: string, dest: string) {
    return tar.extract(
        {
            file,
            strip: 1,
            C: dest,
        },
        [],
    );
}
Salin selepas log masuk
  • Ekstraksi Tar: Fungsi ini mengekstrak kandungan fail .tar.gz ke dalam direktori destinasi yang ditentukan.

4: Menyatukan Semuanya

Fungsi degit utama menghubungkan semuanya bersama-sama, mengendalikan penciptaan direktori, mengambil dan mengekstrak repositori:

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);
};
Salin selepas log masuk

mkdirp digunakan untuk mencipta
direktori secara rekursif.

Kesimpulan:

Saya mendapati bahawa remotion menggunakan degit untuk memuat turun templat apabila anda menjalankan arahan pemasangannya:

npx create-video@latest
Salin selepas log masuk

Arahan ini meminta anda memilih templat, di sinilah degit mula bertindak untuk memuat turun
komitmen terkini templat yang dipilih

Anda boleh menyemak kod ini daripada pakej cipta video untuk bukti.

Use degit to download a template in your CLI tool.

Dapatkan kursus percuma yang diilhamkan oleh amalan terbaik yang digunakan dalam sumber terbuka.

tentang saya:

Laman web: https://ramunarasinga.com/

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

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

E-mel: ramu.narasinga@gmail.com

Ketahui amalan terbaik yang digunakan dalam sumber terbuka.

Rujukan:

  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

Atas ialah kandungan terperinci Gunakan degit untuk memuat turun templat dalam alat CLI anda.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan