In meiner Node-Anwendung muss ich ein Verzeichnis entfernen, das einige Dateien enthält, aber fs.rmdir
funktioniert nur bei leeren Verzeichnissen. Wie kann ich das machen?
Antworten
Zu viele Anzeigen?Ab Node.js 14.14.0 wird empfohlen, fs.rmSync
zu verwenden:
fs.rmSync(dir, { recursive: true, force: true });
Es gibt ein Modul dafür namens rimraf
(https://npmjs.org/package/rimraf). Es bietet die gleiche Funktionalität wie rm -Rf
Asynchrone Verwendung:
var rimraf = require("rimraf");
rimraf("/some/directory", function () { console.log("erledigt"); });
Synchrone Verwendung:
rimraf.sync("/some/directory");
Um Ordner synchron zu entfernen
const fs = require('fs');
const Path = require('path');
const deleteFolderRecursive = function (directoryPath) {
if (fs.existsSync(directoryPath)) {
fs.readdirSync(directoryPath).forEach((file, index) => {
const curPath = path.join(directoryPath, file);
if (fs.lstatSync(curPath).isDirectory()) {
// rekursiv aufrufen
deleteFolderRecursive(curPath);
} else {
// Datei löschen
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(directoryPath);
}
};
Die meisten Leute, die fs
mit Node.js verwenden, möchten Funktionen, die dem "Unix-Weg" im Umgang mit Dateien nahe kommen. Ich benutze fs-extra, um all die coolen Sachen zu haben :
fs-extra enthält Methoden, die nicht im Standard-Node.js fs Paket enthalten sind. Dazu gehören mkdir -p, cp -r und rm-rf.
Noch besser ist, dass fs-extra ein einfacher Ersatz für das native fs ist. Alle Methoden in fs sind unverändert und daran angehängt. Das bedeutet, dass du fs durch fs-extra ersetzen kannst :
// dies kann ersetzt werden
const fs = require('fs')
// durch dies
const fs = require('fs-extra')
Und dann kannst du einen Ordner auf diese Weise entfernen:
fs.removeSync('/tmp/myFolder');
//oder
fs.remove('/tmp/myFolder', callback);
Ab Node v14 (Oktober 2020) hat das fs
Modul fs.rm
und fs.rmSync
, die rekursives Löschen von nicht leeren Verzeichnissen unterstützen:
https://nodejs.org/docs/latest-v14.x/api/fs.html#fs_fs_rm_path_options_callback
Jetzt können Sie etwas wie dies tun:
const fs = require('fs');
fs.rm('/path/to/delete', { recursive: true }, () => console.log('done'));
oder:
const fs = require('fs');
fs.rmSync('/path/to/delete', { recursive: true });
console.log('done');
- See previous answers
- Weitere Antworten anzeigen