Remotion ソース コード内に「degit」という名前のファイルを見つけました。
リモートを使用すると、プログラムでビデオを作成できます。
この記事では、次の概念について説明します:
オープンソースの Readme の 1 つで「デジット」について言及されていたのを覚えていますが、それがどのリポジトリだったか思い出せなかったので、デジットの意味をグーグルで検索し、このデジット npm パッケージを見つけました。
簡単に言えば、degit を使用すると、最新のコミットをダウンロードするだけで、Github リポジトリのコピーをすばやく作成できます
git 履歴全体の代わりに。
このパッケージの詳細については、degit の公式 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'); });
単純なデジット関数の作成方法を理解するために、Remotion の degit.ts ファイルのコードを分解してみましょう。このファイルは、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); }); }
リポジトリをダウンロードした後、tarball の内容を抽出する必要があります:
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 は
の作成に使用されます
ディレクトリを再帰的に取得します。
インストール コマンドを実行するときに、remotion がデジットを使用してテンプレートをダウンロードしていることがわかりました:
npx create-video@latest
このコマンドではテンプレートを選択するよう求められます。ここで、ダウンロードするために degit が動作します
選択したテンプレートの最新のコミット
このコードは、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