JavaScript: ファイルへの書き込み
テキストをファイルに書き込む、3つの方法のメモ。
ひとつめ、非同期処理。node:fs の writeFile 関数を使う。
const fs = require('node:fs')
const { parseArgs } = require('node:util')
const { values, positionals } = parseArgs({
allowPositionals: true,
options: {
message: {
type: 'string',
short: 'm',
default: 'Hello, world!',
},
},
})
const writefile = (filePath, message) => {
fs.writeFile(filePath, message, (err) => {
if (err) {
console.error('Error writing file: ', err)
}
})
}
const filePath = positionals[0]
const message = values.message
writefile(filePath, message)
実行例:
$ node writefile_async.js hello1.txt -m "Hello, Node.js!"
$ cat hello1.txt
Hello, Node.js!
ふたつめ、非同期処理という点では同じだけど、Promise 版。node:fs/promises の writeFile 関数と async / await 構文を使う。
const fs = require('node:fs/promises')
// 中略
const writefile = async (filePath, message) => {
try {
await fs.writeFile(filePath, message)
} catch (err) {
console.error('Error writing file: ', err)
}
}
モジュールの読み込みと writefile の中以外は同じなので省略。同じように実行すれば、同じ結果が得られる。
$ node writefile_promise.js hello2.txt -m "Hello, Node.js!"
$ cat hello2.txt
Hello, Node.js!
さいごのみっつめ、同期処理版。node:fs の writeFileSync 関数を使う。違うところのみ載せる。
const writefile = (filePath, message) => {
try {
fs.writeFileSync(filePath, message)
} catch (err) {
console.error('Error writing file: ', err)
}
}
実行例:
$ node writefile_sync.js hello3.txt -m "Hello, Node.js!"
$ cat hello3.txt
Hello, Node.js!
WEBアプリで使うなら Promise 版、CLIスクリプトなら同期処理版がよさそうに思える。
