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 ファイルのコードを分解してみましょう。このファイルは、完全な履歴をダウンロードせずに GitHub リポジトリの最新状態を取得するという、degit npm パッケージの機能の基本バージョンを実装します。
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<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); }); }
リポジトリをダウンロードした後、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
メール: ramu.narasinga@gmail.com
オープンソースで使用されているベスト プラクティスを学びます。
以上がdegit を使用して、CLI ツールでテンプレートをダウンロードします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。