我正在尝试删除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); } }); };
解决方法
有几件事:
还记得你调用的函数的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
这些可能会让你走上正轨.