3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BunAdvent Calendar 2023

Day 12

【Bun】writeで親ディレクトリが無ければ作成してくれる件

Last updated at Posted at 2023-12-11

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 スクリプトなどを作り

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 でディレクトリを見るとちゃんとできてる
$ tree
.
├─ huga
│   └─ foo
│       └─ piyo.txt
└─ write.js

めでたしめでたし。
でも、こんな魔法の杖を使いたくないときもあります。そんな時は、createPath: false を付けてこう書きます。

write.js
import { write } from "bun";
await write("huga/foo/piyo.txt", "Hello, world!", { createPath: false });

今日はここまで。

最近 Qiita に書いた Bun 関連の記事10選

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?