
我现在的做法是多创建一个临时文件,然后删除原文件,重命名临时文件,我想知道有没有更好的办法来实现用 node 流来改写同文件?
代码如下
const rm = require('rimraf') const through2 = require('through2') const fs = require('graceful-fs') // source file path const replacementPath = `./static/projects/${destPath}/index.html` // temp file path const tempfilePath = `./static/projects/${destPath}/tempfile.html` // read source file then write into temp file await promiseReplace(replacementPath, tempfilePath) // del the source file rm.sync(replacementPath) // rename the temp file name to source file name fs.renameSync(tempfilePath, replacementPath) // del the temp file rm.sync(tempfilePath) // promiseify readStream and writeStream function promiseReplace (readfile, writefile) { return new Promise((res, rej) => { fs.createReadStream(readfile) .pipe(through2.obj(function (chunk, encoding, done) { const replaced = chunk.toString().replace(/id="wrap"/g, 'dududud') done(null, replaced) })) .pipe(fs.createWriteStream(writefile)) .on('finish', () => { console.log('replace done') res() }) .on('error', (err) => { console.log(err) rej(err) }) }) } 1 qiuyk 2017 年 10 月 4 日 应该是不行的 要么全读进内存 要么创建临时文件 |