2015-08-10 3 views
4

Я пытаюсь удалить каталог 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 не имеет легкий способ заставить удаление

ответ

6

Пара вещей:

где же ваша следующая функция (ERR) взялось?

Также помните, что RmDir в Node.js документации для функции вы звоните так: 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

Это может заставить вас на правильном пути.

+0

спасибо! Очень полезно :) найти также [поток с асинхронным методом] (http://stackoverflow.com/questions/12627586/is-node-js-rmdir-recursive-will-it-work-on-non-empty-directories/12761924 # 12761924) – francesca

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

удостоверьтесь, что проверьте папку модулей в текущем пути.

+0

Что такое 'next' в этом случае? –

Смежные вопросы