对于Node.js,以类似方式预装到文件的最佳方法是什么
fs.appendFile(path.join(__dirname, 'app.log'), 'appendme', 'utf8')
就个人而言,最好的方法是围绕创建日志的异步解决方案,我可以从顶部推送到该文件。
答案 0 :(得分:8)
答案 1 :(得分:6)
这个解决方案不是我的解决方案,我不知道它来自哪里,但它确实有效。
const data = fs.readFileSync('message.txt')
const fd = fs.openSync('message.txt', 'w+')
const insert = new Buffer("text to prepend \n")
fs.writeSync(fd, insert, 0, insert.length, 0)
fs.writeSync(fd, data, 0, data.length, insert.length)
fs.close(fd, (err) => {
if (err) throw err;
});
答案 2 :(得分:5)
无法添加到文件的开头。 See this question针对C中的类似问题或this question针对C#中的类似问题。
我建议您以常规方式进行日志记录(即,记录到文件末尾)。
否则,无法读取文件,将文本添加到开头并将其写回文件,这可能会非常快速地成本。
答案 3 :(得分:1)
可以通过使用prepend-file
节点模块来实现。请执行以下操作:
npm i prepend-file -S
prepend-file module
。示例:
let firstFile = 'first.txt';
let secondFile = 'second.txt';
prependFile(firstFile, secondFile, () => {
console.log('file prepend successfully');
})
答案 4 :(得分:0)
这是一个如何使用gulp和自定义内置函数将文本添加到文件中的示例。
var through = require('through2');
gulp.src('somefile.js')
.pipe(insert('text to prepend with'))
.pipe(gulp.dest('Destination/Path/'))
function insert(text) {
function prefixStream(prefixText) {
var stream = through();
stream.write(prefixText);
return stream;
}
let prefixText = new Buffer(text + "\n\n"); // allocate ahead of time
// creating a stream through which each file will pass
var stream = through.obj(function (file, enc, cb) {
//console.log(file.contents.toString());
if (file.isBuffer()) {
file.contents = new Buffer(prefixText.toString() + file.contents.toString());
}
if (file.isStream()) {
throw new Error('stream files are not supported for insertion, they must be buffered');
}
// make sure the file goes through the next gulp plugin
this.push(file);
// tell the stream engine that we are done with this file
cb();
});
// returning the file stream
return stream;
}
来源:[cole_gentry_github_dealingWithStreams][1]