- Вы хотите распаковать zip-файл, используя
unzipper
.
- Вы также хотите экспортировать каталоги без файлов.
Если мое понимание верно, как насчет этой модификации? Я думаю, что есть несколько ответов для вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них.
Точка модификации:
- В этой модификации, когда тип файла "Каталог", создается новый Каталог. Таким образом, каталог без файлов можно экспортировать.
Модифицированный скрипт:
Пожалуйста, измените следующим образом.
// unzip module
import fs from 'fs-extra'
import unzipper from 'unzipper'
import Promise from 'bluebird'
import path from 'path' // Added
// Modified
export default ({ inputFilePath, outputFilePath }) => {
return new Promise(async (resolve, reject, onCancel) => {
try {
await streamPromise(fs.createReadStream(inputFilePath).pipe(unzipper.Parse()), outputFilePath)
.then(resolve)
} catch (error) {
reject(error)
}
})
}
// Modified
const streamPromise = (stream, outputFilePath) => {
return new Promise((resolve, reject) => {
stream.on("entry", entry => {
const fileName = entry.path;
const type = entry.type;
if (type == "Directory") {
fs.mkdirSync(path.join(outputFilePath, fileName));
} else if (type == "File") {
entry.pipe(fs.createWriteStream(path.join(outputFilePath, fileName)));
}
});
stream.on("end", () => {
resolve("end");
});
stream.on("finish", () => {
resolve("finish");
});
stream.on("error", error => {
reject(error);
});
});
};
Справка:
В моей среде я мог подтвердить, что модифицированный скрипт работает. Но в вашей среде скрипт не работает, я прошу прощения.