"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استخدم degit لتنزيل قالب في أداة CLI الخاصة بك.

استخدم degit لتنزيل قالب في أداة CLI الخاصة بك.

تم النشر بتاريخ 2024-11-02
تصفح:859

لقد وجدت ملفًا باسم "degit" في كود مصدر الإزالة.
تساعدك ميزة Remotion على إنشاء مقاطع فيديو برمجيًا.

في هذا المقال سنتناول المفاهيم التالية:

  1. ما هو الديجيت؟
  2. أنشئ دالة رقمية بسيطة مستوحاة من ملف الأرقام الخاص بـ Remotion

ما هو ديجيت؟

أتذكر رؤية كلمة "degit" مذكورة في أحد الملفات التمهيدية في المصدر المفتوح، لكن لم أتمكن من تذكر المستودع الذي كانت عليه، لذا بحثت في Google عما يعنيه الرقم ووجدت حزمة degit npm هذه.

بعبارات بسيطة، يمكنك استخدام degit لإنشاء نسخة سريعة من مستودع Github عن طريق تنزيل أحدث التزام فقط
بدلاً من سجل git بأكمله.

قم بزيارة حزمة npm الرسمية للرقم الرقمي لقراءة المزيد عن هذه الحزمة.

يمكنك استخدام حزمة الأرقام هذه لتنزيل عمليات إعادة الشراء من Gitlab أو Bitbucket أيضًا بحيث لا يقتصر الأمر على مستودعات 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

إليك نموذج للاستخدام في 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');
});

أنشئ دالة رقمية بسيطة مستوحاة من ملف degit الخاص بـ Remotion

لفهم كيفية إنشاء دالة رقمية بسيطة، دعنا نقسم الكود من ملف degit.ts الخاص بـ Remotion. يطبق هذا الملف إصدارًا أساسيًا لما تفعله حزمة degit npm: جلب أحدث حالة لمستودع GitHub دون تنزيل السجل الكامل.

1. الواردات المستخدمة

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: يستخدم لتقديم طلب شبكة لجلب المستودع.
  • fs: يتفاعل مع نظام الملفات، مثل كتابة الملفات التي تم تنزيلها.
  • tmpdir: يوفر مسار الدليل المؤقت للنظام.
  • المسار: يعالج ويحول مسارات الملفات.
  • القطران: يستخرج محتويات كرة القطران (ملف مضغوط).
  • mkdirp: وظيفة مساعدة لإنشاء الأدلة بشكل متكرر، متوفرة في ملف منفصل.

2: جلب المستودع

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);
    });
}
  • معالجة عنوان URL: تتحقق الوظيفة من نجاح الطلب (رموز الحالة أقل من 300). إذا كانت عملية إعادة توجيه (الرموز بين 300 و399)، فإنها تتبع عنوان URL الجديد. وإذا كان خطأ (الرموز 400)، فإنه يرفض الوعد.
  • حفظ الملف: يتم تنزيل المستودع وحفظه في المسار المقصود باستخدام fs.createWriteStream.

3: استخراج المستودع

بعد تنزيل المستودع، من الضروري استخراج محتويات القطران:

function untar(file: string, dest: string) {
    return tar.extract(
        {
            file,
            strip: 1,
            C: dest,
        },
        [],
    );
}
  • استخراج القطران: تقوم هذه الوظيفة باستخراج محتويات ملف .tar.gz إلى دليل الوجهة المحدد.

4: تجميع كل شيء معًا

تربط وظيفة الأرقام الرئيسية كل شيء معًا، وتتعامل مع إنشاء الدليل وجلب واستخراج المستودع:

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 لإنشاء
الدلائل بشكل متكرر.

خاتمة:

لقد وجدت أن الإزالة تستخدم degit لتنزيل القوالب عند تشغيل أمر التثبيت الخاص بها:

npx create-video@latest

يطلب منك هذا الأمر اختيار قالب، وهنا يأتي دور degit للتنزيل
أحدث التزام بالقالب المحدد

يمكنك التحقق من هذا الرمز من حزمة إنشاء فيديو للإثبات.

Use degit to download a template in your CLI tool.

احصل على دورات مجانية مستوحاة من أفضل الممارسات المستخدمة في المصادر المفتوحة.

ْعَنِّي:

الموقع الإلكتروني: https://ramunarasinga.com/

لينكد إن: https://www.linkedin.com/in/ramu-narasinga-189361128/

جيثب: https://github.com/Ramu-Narasinga

البريد الإلكتروني: [email protected]

تعرف على أفضل الممارسات المستخدمة في المصادر المفتوحة.

مراجع:

  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
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ramunarasinga/use-degit-to-download-a-template-in-your-cli-tool-6hg?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3