book-cliiii
Version:
Command line interface for front end project
35 lines (31 loc) • 1.02 kB
JavaScript
const fs = require('fs-extra');
const path = require('path');
/**
* 在文件树中删除文件
* @param {String} directory - 文件路径
* @param {String} newFiles - 新文件内容
* @param {String} previousFiles - 前置文件
*/
function deleteRemovedFiles(directory, newFiles, previousFiles) {
// 获取不在新文件系统中且仍然存在的所有文件
const filesToDelete = Object.keys(previousFiles).filter(
(filename) => !newFiles[filename],
);
// 删除这些文件中的每一个
return Promise.all(
filesToDelete.map((filename) => fs.unlink(path.join(directory, filename))),
);
}
module.exports = async function writeFileTree(dir, files, previousFiles) {
if (process.env.BOOK_CLI_SKIP_WRITE) {
return;
}
if (previousFiles) {
await deleteRemovedFiles(dir, files, previousFiles);
}
Object.keys(files).forEach((name) => {
const filePath = path.join(dir, name);
fs.ensureDirSync(path.dirname(filePath));
fs.writeFileSync(filePath, files[name]);
});
};