Maison  >  Article  >  interface Web  >  Comment copier des dossiers de manière récursive dans nodejs

Comment copier des dossiers de manière récursive dans nodejs

PHPz
PHPzoriginal
2023-05-14 09:03:071822parcourir

Dans Node.js, la copie récursive de dossiers est une opération courante. Cet article explique comment copier un dossier entier, y compris tous les sous-fichiers et sous-dossiers qu'il contient, à l'aide de Node.js.

Il existe deux manières principales de copier un dossier dans Node.js. L'une consiste à utiliser le module fs intégré et l'autre à utiliser un module tiers.

Utilisez le module fs intégré pour la copie de dossier

Le module fs intégré de Node.js fournit plusieurs API pour nous aider à implémenter la fonction de copie de dossier.

Tout d'abord, nous devons créer une fonction qui recevra deux paramètres : le chemin d'accès au dossier source et le chemin d'accès au dossier de destination.

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

function copyFolderRecursiveSync(source, target) {
  // ...
}

Ensuite, nous devons créer le dossier de destination. Si le dossier cible n'existe pas, nous pouvons le créer à l'aide de la fonction fs.mkdirSync().

if (!fs.existsSync(target)) {
  fs.mkdirSync(target);
}

Ensuite, nous devons lister tous les fichiers et sous-dossiers du dossier source. Nous pouvons utiliser la fonction fs.readdirSync() pour obtenir les noms de tous les fichiers et sous-dossiers du dossier source.

const files = fs.readdirSync(source);

Pour chaque fichier ou sous-dossier, nous devons vérifier s'il s'agit d'un fichier ou d'un dossier. Nous pouvons utiliser la fonction fs.statSync() pour obtenir l'état d'un fichier ou d'un dossier.

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
  }

Si le fichier est un fichier, nous pouvons utiliser la fonction fs.copyFileSync() pour le copier dans le dossier de destination.

if (stat.isFile()) {
  fs.copyFileSync(sourcePath, targetPath);
}

Si le fichier est un dossier, nous devons appeler la fonction copyFolderRecursiveSync() de manière récursive et créer un nouveau dossier dans le dossier cible.

if (stat.isDirectory()) {
  copyFolderRecursiveSync(sourcePath, targetPath);
}

Le code complet est le suivant :

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');

Utilisation de modules tiers pour la copie de dossier

En plus d'utiliser le module fs intégré, vous pouvez également utiliser des modules tiers pour implémenter la fonction de copie de dossier. Nous présenterons ici deux modules couramment utilisés : fs-extra et ncp.

module fs-extra

fs-extra est un module tiers pour Node.js qui fournit plus de fonctions que le module fs intégré, notamment la copie, le déplacement et la suppression de fichiers et de dossiers.

Nous pouvons utiliser la fonction copySync() de fs-extra pour copier l'intégralité du dossier, y compris les sous-dossiers et les fichiers qu'il contient.

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

fs.copySync('path/to/sourceFolder', 'path/to/targetFolder');

ncp module

ncp est un module tiers pour Node.js qui peut également être utilisé pour copier des dossiers de manière récursive. Contrairement à fs-extra, ncp peut gérer plus facilement les erreurs lors de la réplication.

Nous pouvons copier l'intégralité du dossier à l'aide de la fonction ncp() de ncp.

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

ncp('path/to/sourceFolder', 'path/to/targetFolder', function (err) {
  if (err) {
    console.error(err);
  } else {
    console.log('done');
  }
});

Résumé

Il existe plusieurs façons de copier des dossiers de manière récursive dans Node.js. L'utilisation du module fs intégré nécessite d'écrire plus de code, mais nous avons plus de contrôle sur le processus de copie. La copie de dossiers est plus facile à réaliser en utilisant les modules tiers fs-extra et ncp, mais cela peut réduire notre contrôle sur le processus de copie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn