Files
vue-cli/packages/@vue/cli/lib/util/writeFileTree.js
Binwei Fang dc4c4559b6 fix(generator): avoid doing redundant write operations (#6011)
Avoid overwriting the file which is not modified when executing `vue add/invoke`
This will reduce the chance of encountering issues like #5939
2020-12-20 19:56:33 +08:00

36 lines
1.0 KiB
JavaScript

const fs = require('fs-extra')
const path = require('path')
function deleteRemovedFiles (directory, newFiles, previousFiles) {
// get all files that are not in the new filesystem and are still existing
const filesToDelete = Object.keys(previousFiles)
.filter(filename => !newFiles[filename])
// delete each of these files
return Promise.all(filesToDelete.map(filename => {
return fs.unlink(path.join(directory, filename))
}))
}
/**
*
* @param {string} dir
* @param {Record<string,string|Buffer>} files
* @param {Record<string,string|Buffer>} [previousFiles]
* @param {Set<string>} [include]
*/
module.exports = async function writeFileTree (dir, files, previousFiles, include) {
if (process.env.VUE_CLI_SKIP_WRITE) {
return
}
if (previousFiles) {
await deleteRemovedFiles(dir, files, previousFiles)
}
Object.keys(files).forEach((name) => {
if (include && !include.has(name)) return
const filePath = path.join(dir, name)
fs.ensureDirSync(path.dirname(filePath))
fs.writeFileSync(filePath, files[name])
})
}