ホームページ > ウェブフロントエンド > フロントエンドQ&A > Nodejsでフォルダーを再帰的にコピーする方法

Nodejsでフォルダーを再帰的にコピーする方法

PHPz
リリース: 2023-05-14 09:03:07
オリジナル
1953 人が閲覧しました

Node.js では、フォルダーを再帰的にコピーするのが一般的な操作です。この記事では、Node.js を使用して、フォルダー内のすべてのサブファイルとサブフォルダーを含むフォルダー全体をコピーする方法について説明します。

Node.js でフォルダーをコピーするには、主に 2 つの方法があります。 1 つは組み込みの fs モジュールを使用する方法、もう 1 つはサードパーティのモジュールを使用する方法です。

フォルダー コピーに組み込みの fs モジュールを使用する

Node.js の組み込みの fs モジュールは、フォルダー コピー機能の実装に役立ついくつかの API を提供します。

まず、ソース フォルダーへのパスと宛先フォルダーへのパスという 2 つのパラメーターを受け取る関数を作成する必要があります。

const fs = require('fs');
const path = require('path');

function copyFolderRecursiveSync(source, target) {
  // ...
}
ログイン後にコピー

次に、ターゲット フォルダーを作成する必要があります。ターゲットフォルダーが存在しない場合は、fs.mkdirSync() 関数を使用して作成できます。

if (!fs.existsSync(target)) {
  fs.mkdirSync(target);
}
ログイン後にコピー

次に、ソース フォルダー内のすべてのファイルとサブフォルダーを一覧表示する必要があります。 fs.readdirSync() 関数を使用して、ソース フォルダー内のすべてのファイルとサブフォルダーの名前を取得できます。

const files = fs.readdirSync(source);
ログイン後にコピー

各ファイルまたはサブフォルダーについて、それがファイルであるかフォルダーであるかを確認する必要があります。 fs.statSync() 関数を使用して、ファイルまたはフォルダーのステータスを取得できます。

files.forEach((file) => {
  const sourcePath = path.join(source, file);
  const targetPath = path.join(target, file);

  const stat = fs.statSync(sourcePath);
  if (stat.isFile()) {
    // copy file
  } else if (stat.isDirectory()) {
    // copy directory
  }
ログイン後にコピー

ファイルがファイルの場合は、fs.copyFileSync() 関数を使用して、それをターゲット フォルダーにコピーできます。

if (stat.isFile()) {
  fs.copyFileSync(sourcePath, targetPath);
}
ログイン後にコピー

ファイルがフォルダーの場合は、copyFolderRecursiveSync() 関数を再帰的に呼び出して、ターゲット フォルダーに新しいフォルダーを作成する必要があります。

if (stat.isDirectory()) {
  copyFolderRecursiveSync(sourcePath, targetPath);
}
ログイン後にコピー

完全なコードは次のとおりです:

const fs = require('fs');
const path = require('path');

function copyFolderRecursiveSync(source, target) {
  if (!fs.existsSync(target)) {
    fs.mkdirSync(target);
  }

  const files = fs.readdirSync(source);

  files.forEach((file) => {
    const sourcePath = path.join(source, file);
    const targetPath = path.join(target, file);

    const stat = fs.statSync(sourcePath);
    if (stat.isFile()) {
      fs.copyFileSync(sourcePath, targetPath);
    } else if (stat.isDirectory()) {
      copyFolderRecursiveSync(sourcePath, targetPath);
    }
  });
}

copyFolderRecursiveSync('path/to/sourceFolder', 'path/to/targetFolder');
ログイン後にコピー

フォルダー コピーにサードパーティ モジュールを使用する

組み込みの fs モジュールを使用することに加えて、次のこともできます。フォルダーのコピー機能を実装するためのサードパーティ モジュール。ここでは、一般的に使用される 2 つのモジュール、fs-extra と ncp を紹介します。

fs-extra モジュール

fs-extra は、ファイルやフォルダーのコピーと移動、削除など、組み込みの fs モジュールよりも多くの機能を提供する Node.js 用のサードパーティ モジュールです。 。

fs-extra の copySync() 関数を使用して、サブフォルダーとその中のファイルを含むフォルダー全体をコピーできます。

const fs = require('fs-extra');

fs.copySync('path/to/sourceFolder', 'path/to/targetFolder');
ログイン後にコピー

ncp module

ncp は、フォルダーを再帰的にコピーするために使用できる Node.js のサードパーティ モジュールです。 fs-extra とは異なり、ncp はレプリケーション中のエラーをより簡単に処理できます。

ncp の ncp() 関数を使用して、フォルダー全体をコピーできます。

const ncp = require('ncp').ncp;

ncp('path/to/sourceFolder', 'path/to/targetFolder', function (err) {
  if (err) {
    console.error(err);
  } else {
    console.log('done');
  }
});
ログイン後にコピー

概要

Node.js でフォルダーを再帰的にコピーするには、複数の方法があります。組み込みの fs モジュールを使用するには、より多くのコードを記述する必要がありますが、コピー プロセスをより詳細に制御できます。フォルダーのコピーは、サードパーティ モジュールの fs-extra および ncp を使用すると簡単に実現できますが、これによりコピー プロセスの制御が低下する可能性があります。

以上がNodejsでフォルダーを再帰的にコピーする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート