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

我试图删除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); } }); }; 

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

几件事情:

你的下一个(err)函数从哪里来?

另外请记住,您正在调用的函数的node.js文档中的rmdir是这样的: https : //nodejs.org/api/fs.html#fs_fs_rmdir_path_callback

 Asynchronous rmdir(2) 

这个posix的定义是:

 deletes a directory, which must be empty. 

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

这里有一个与非空目录交易的要点:

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

和一个节点模块在这里:

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

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

 var fs = require('fs'); var path = require('path'); var child_process = require('child_process'); var 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, function (err) { return next(err); }) } }); }; 

确保在当前path中检查模块文件夹。