Я нашел файл с именем «цифра» в исходном коде Remotion.
Remotion помогает создавать видео программно.
В этой статье мы рассмотрим следующие концепции:
Я помню, что видел упоминание «цифры» в одном из файлов Readme с открытым исходным кодом, но я не мог вспомнить, какой это репозиторий, поэтому я погуглил, что означает цифра, и нашел этот пакет degit npm.
Проще говоря, вы можете использовать degit, чтобы быстро создать копию репозитория Github, загрузив только последний коммит
вместо всей истории git.
Посетите официальный пакет npm для degit, чтобы узнать больше об этом пакете.
Вы также можете использовать этот пакет degit для загрузки репозиториев из 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, давайте разберем код из файла 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, }, [], ); }
Основная функция degit связывает все воедино, обрабатывая создание каталога, выборку и извлечение репозитория:
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 используется для создания
каталоги рекурсивно.
Я обнаружил, что remotion использует цифры для загрузки шаблонов при запуске команды их установки:
npx create-video@latest
Эта команда просит вас выбрать шаблон, здесь вступает в действие цифра для загрузки
последний коммит выбранного шаблона
Вы можете проверить этот код в пакете create-video.
Получите бесплатные курсы, вдохновленные лучшими практиками, используемыми в открытом исходном коде.
Веб-сайт: https://ramunarasinga.com/
Linkedin: https://www.linkedin.com/in/ramu-narasinga-189361128/
Github: https://github.com/Ramu-Narasinga
Электронная почта: [email protected]
Изучите лучшие практики, используемые в открытом исходном коде.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3