لقد وجدت ملفًا باسم "degit" في كود مصدر الإزالة.
تساعدك ميزة 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.ts الخاص بـ Remotion. يطبق هذا الملف إصدارًا أساسيًا لما تفعله حزمة degit npm: جلب أحدث حالة لمستودع GitHub دون تنزيل السجل الكامل.
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); }); }
بعد تنزيل المستودع، من الضروري استخراج محتويات القطران:
function untar(file: string, dest: string) { return tar.extract( { file, strip: 1, C: dest, }, [], ); }
تربط وظيفة الأرقام الرئيسية كل شيء معًا، وتتعامل مع إنشاء الدليل وجلب واستخراج المستودع:
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 للتنزيل
أحدث التزام بالقالب المحدد
يمكنك التحقق من هذا الرمز من حزمة إنشاء فيديو للإثبات.
احصل على دورات مجانية مستوحاة من أفضل الممارسات المستخدمة في المصادر المفتوحة.
الموقع الإلكتروني: https://ramunarasinga.com/
لينكد إن: https://www.linkedin.com/in/ramu-narasinga-189361128/
جيثب: https://github.com/Ramu-Narasinga
البريد الإلكتروني: [email protected]
تعرف على أفضل الممارسات المستخدمة في المصادر المفتوحة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3