Рекурсивный fs.rmdir перестает работать после упаковки приложения - PullRequest
0 голосов
/ 11 апреля 2020

fs.rmdir перестает работать после того, как приложение упаковано с Zeit / pkg

Следующий скрипт работает в 2 случаях:

  1. Скрипт запускается без распаковки непосредственно с узла как узла test. js и работает отлично
  2. Сценарий запускается упакованным, а tmpDir пустым. (большинство удаляет / комментирует fs.appendFileSyn c строка)
    const os = require('os');
    const fs = require('fs');
    const path = require('path');

    var tmpDir = path.join(os.tmpdir(), 'test');
    if(!fs.existsSync(tmpDir)){
        fs.mkdirSync(tmpDir);
        fs.appendFileSync(path.join(tmpDir, 'message.txt'), 'data to append');
    }

    fs.rmdir(tmpDir, {recursive: true}, function(err){
        if(err) throw err;
        console.log('finished');
    });

В противном случае возвращается следующая ошибка:

internal/validators.js:117
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Buffer
    at validateString (internal/validators.js:117:11)
    at Object.dirname (path.js:583:5)
    at isRootPath (pkg/prelude/bootstrap.js:168:26)
    at fs.readdir (pkg/prelude/bootstrap.js:850:18)
    at _rmchildren (internal/fs/rimraf.js:130:3)
    at internal/fs/rimraf.js:117:16
    at FSReqCallback.oncomplete (fs.js:154:23) {
  code: 'ERR_INVALID_ARG_TYPE'
}

Проверено на узле 12 и 13 на Windows 10.

Кто-нибудь знает решение этой проблемы?

Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Я решил эту проблему, включив и использовав пакет rimraf напрямую.

Также есть пакет Del, а для более простого решения есть этот бит кода

var fs = require('fs');
var deleteFolderRecursive = function(path) {
  if( fs.existsSync(path) ) {
    fs.readdirSync(path).forEach(function(file,index){
      var curPath = path + "/" + file;
      if(fs.lstatSync(curPath).isDirectory()) { // recurse
        deleteFolderRecursive(curPath);
      } else { // delete file
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(path);
  }
};
...