Files
vue-cli/packages/@vue/cli/lib/util/writeFileTree.js
2018-04-25 17:42:26 -04:00

31 lines
1.0 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const { promisify } = require('util')
const unlink = promisify(fs.unlink)
const mkdirp = promisify(require('mkdirp'))
const write = promisify(fs.writeFile)
async 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
const unlinkPromises = filesToDelete.map(filename => unlink(path.join(directory, filename)))
return Promise.all(unlinkPromises)
}
module.exports = async function writeFileTree (dir, files, previousFiles) {
if (process.env.VUE_CLI_SKIP_WRITE) {
return
}
if (previousFiles) {
await deleteRemovedFiles(dir, files, previousFiles)
}
return Promise.all(Object.keys(files).map(async (name) => {
const filePath = path.join(dir, name)
await mkdirp(path.dirname(filePath))
await write(filePath, files[name])
}))
}