节点如果存在,如何删除目录?

fra*_*sca 4 node.js

我正在尝试删除node_modules目录(如果它存在且不为空)

var fs = require('fs'),
    path = require('path'),
    child_process = require('child_process'),
    cmd;

module.exports = function(){
    var modulesPath = '../modules';

    fs.readdirSync(modulesPath)
        .forEach(function(dir) {
            var location = path.join(dir, 'node_modules');
            if (fs.existsSync(location)){
                fs.rmdir(location);
            }
        });
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,fs.rmdir命令只有在没有文件的情况下才会删除目录.NodeJS没有一种简单的方法来强制删除

nic*_*ick 9

两班轮:

if (fs.existsSync(dir)) {
  fs.rmdirSync(dir, {recursive: true})
}
Run Code Online (Sandbox Code Playgroud)

  • 一行:`fs.rmSync('./dir', {force: true, recursive: true});`。[来源](https://nodejs.org/api/fs.html#fs_fs_rmsync_path_options) (6认同)

Jar*_*rod 8

有几件事:

你的下一个(错误)功能来自哪里?

还要记住你调用的函数的node.js文档中的rmdir是这样的:https: //nodejs.org/api/fs.html#fs_fs_rmdir_path_callback

Asynchronous rmdir(2)
Run Code Online (Sandbox Code Playgroud)

posix的定义是:

deletes a directory, which must be empty.
Run Code Online (Sandbox Code Playgroud)

确保你的目录是空的,在这种情况下它似乎不会.

这里有一个关于非空目录的要点:

https://gist.github.com/tkihira/2367067

var fs = require("fs");
var path = require("path");

var rmdir = function(dir) {
    var list = fs.readdirSync(dir);
    for(var i = 0; i < list.length; i++) {
        var filename = path.join(dir, list[i]);
        var stat = fs.statSync(filename);

        if(filename == "." || filename == "..") {
            // pass these files
        } else if(stat.isDirectory()) {
            // rmdir recursively
            rmdir(filename);
        } else {
            // rm fiilename
            fs.unlinkSync(filename);
        }
    }
    fs.rmdirSync(dir);
};
Run Code Online (Sandbox Code Playgroud)

这里有一个节点模块:

https://github.com/dreamerslab/node.rmdir

这些可能会让你走上正轨.


Kyl*_*Mit 5

更新 v16 - 异步和递归方法

您现在可以使用fs.rm()fs.promises.rm()像这样:

fs.rm("/directory-to-delete", { recursive: true, force: true })
Run Code Online (Sandbox Code Playgroud)

选项

  • recursive <boolean>如果为 true,则执行递归目录删除。
  • force <boolean>如果为 true,则如果路径不存在,则异常将被忽略。

进一步阅读

  • 现在是 2023 年,这应该被标记为正确答案! (2认同)