mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-13 02:29:40 -06:00
Avoid overwriting the file which is not modified when executing `vue add/invoke` This will reduce the chance of encountering issues like #5939
36 lines
1.0 KiB
JavaScript
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])
|
|
})
|
|
}
|