节点如何删除一个目录如果存在?
我试图删除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中检查模块文件夹。