Bun の v1.0.6のリリースノートというかブログを見てたら、「Bun.writeってば、親ディレクトリが存在しない場合は作成するようになりました」とあったので、今回はそれを軽く試してみます。
Bun > v1.0.6のリリースノート
たとえば、
./hoge
にいる時に
./hoge/huga/foo/piyo.txt
な piyo.txt ファイルを書き込みたいときには、一般的には、まずは、例えば次のようにしてシェルやプログラム内で huga/foo までのディレクトリを予め作ります。
$ mkdir -p huga/foo
予め huga/foo を作らずに、例えば次のような write 関数を走らせる write.js スクリプトなどを作り
import { write } from "bun";
await write("huga/foo/piyo.txt", "Hello, world!");
実行すればエラーになります。まぁ、Node.jsでもそうです。
$ bun write.js
1 | import { write } from "bun";
2 | await write("huga/foo/piyo.txt", "Hello, world!");
^
ENOENT: No such file or directory
path: "huga/foo/piyo.txt"
syscall: "open"
errno: -2
at /home/tato/bun/create-path-by-write/write.js:2:7
at asyncModuleEvaluation (:1:33)
at asyncModuleEvaluation (:1:33)
まぁ、普通はここで泣きながらディレクトリを作る作業にいそしむわけです。
でも安心してください。Bun v1.0.16 からはエラーにならず write 関数だけで huga/foo/piyo.txt まで一気に作ってくれます。
予めディレクトリを作る必要もなく、エラーに泣かされることもありません。
まず、バージョンを v1.0.16 に上げてみましょう。
$bun upgrade v1.0.16
$ bun -v
1.0.16
今度は、実行してもエラーになりません。
$ bun write.js
$ tree
.
├─ huga
│ └─ foo
│ └─ piyo.txt
└─ write.js
めでたしめでたし。
でも、こんな魔法の杖を使いたくないときもあります。そんな時は、createPath: false を付けてこう書きます。
import { write } from "bun";
await write("huga/foo/piyo.txt", "Hello, world!", { createPath: false });
今日はここまで。
最近 Qiita に書いた Bun 関連の記事10選