結論
正式なLTSになってるわけじゃないけど、本番投入に問題ない仕上がりにはなってる
Node.js v12 でfs/promisesがexperimentalでなくなった件
Node.js10からfs Promises APIが実装された。
が、実行すると、
ExperimentalWarning: The fs/promises API is experimental
のようにExperimentalである旨が表示される。ファイルの読み書きはコールバックなしで読みやすく書きたいよね、とは思いつつ、実際重要な機能だしExperimentalだとちょっと本番適用厳しいなぁって感じだった。
しかし12(LTS予定)ではExperimentalが外されている。(詳しく言うとv11ですでにStableになった
ってことで偶数バージョンである12で晴れてasync/awaitでfsが使える!!(念願
サンプルコード
めっちゃシンプルにした。これだけで読み書き可能
const fs = require('fs').promises; (async () => { const filename = 'newfile.txt'; await fs.writeFile(filename, Date.now()); const message = await fs.readFile(filename, 'utf-8'); console.log(message); })()
ロード
今まで
const fs = require('fs');
だったのが
const fs = require('fs').promises;
になる
書き込み
第1引数に保存したいファイル名、第2引数に書き込みたい内容 ここには載せてないが、第3引数を {}
で渡すことでオプションを渡せる(詳しくは公式ドキュメント参照
読み込み
これも第1引数にファイル名 注意点として、第2引数に文字エンコードを指定しないと文字列ではなくBufferクラスが返ってきてしまう。
await fs.readFile(filename, 'utf-8');
他にも渡したいオプションが有るなら、以下のように{}で渡すこともできる
await fs.readFile(filename, {encoding: 'utf-8'});