Deno v1.26.1
Deno v1.26.1がリリースされました。
Node-APIの実装
DenoでNode-APIが実装されました。
Node-APIで実装されたアドオンのrequire()
での読み込みがサポートされます。
Node-APIを有効化するためには、今のところ、--allow-ffi
の指定が必要なようです。 (ただし、将来的にオプションが変わる可能性はあるようです)
いまのところ、lightningcssやlz4-napiなどが動作することが確認されているようです。(napi-rs/napi-rs#900)
Node.js互換に関する改善
Node-APIの実装以外に関する改善として、npm:
経由で読まれたパッケージの依存関係の解析結果がキャッシュされるようになりました。
これにより、キャッシュが存在する場合は、Viteの起動が3倍近く高速化されているようです。
キャッシュの仕組みはSQLiteをベースに実装されており、$DENO_DIR/node_analysis_cache_v1
にデータベースが作成されます。
その他の改善として、deno cache
でのnpm:
のサポートやrequire()
でのJSONファイルの読み込みなどがサポートされています。
Web Cache APIのバグ修正
Deno v1.26で追加されたCache
APIに関するバグ修正が実施されています。
Cache.put()
に渡したResponse
オブジェクトがconsumed状態にならない問題が修正Cache.put()
に渡したResponse
に紐づくReadableStream
の読み込みでエラーが起きると、リソースリークが発生する問題が修正Cache.put()
で書き込みに失敗したときに、中途半端にキャッシュが保存されないように改善
その他の修正
--unstable
を付けないと、Deno.hostname()
がundefined
になる問題が修正 (Deno.hostname()
はDeno v1.26で安定化されています)- リクエストボディの読み込みが最適化 (perf(ext/fetch): consume body using ops (#16038))
- 一度、
Request#text()
などでリクエストボディを消費したにも関わらず、再度Request.body
を参照するとRequest.bodyUsed
がfalse
に戻ってしまう問題が修正 Deno.serve()
で、ステータスコードが204
の際はContent-Length
が設定されないように修正SubtleCrypto.deriveBits()
でlength
引数に与えられた長さが考慮されない問題が修正
https://github.com/denoland/deno/releases/tag/v1.26.1
deno_std v0.159.0
deno_std v0.159.0がリリースされました。
std/textproto
の非推奨化
以下の理由などから、std/textproto
が非推奨化されました。
- 現在は
deno_std
の内部で使われていないこと deno_std
の方針として、GoスタイルのAPI(Deno.Reader
/Deno.Writer
)からWeb Streams APIベースへ移行されていること
今後は、このモジュールの使用は避けることが推奨されます。
std/streams/conversion
: iterateReader
のバグ修正
iterateReader
に長年存在していたバグが修正されています。
具体的な修正内容については、以下の記事で詳細に内容が解説されています。
また、この修正に関連してiterateReader()
の実装が効率化されています。(perf(streams): memory optimizations by avoiding large buffer allocation in a loop (#2748))
std/collections/partition
の型定義の改善
以下のように、partition
の第2引数にtype predicateを指定した場合、戻り値のそれぞれの配列の型が推論されるように型定義が改善されました。
const values = [1, "23", 456, "789"];
const [numbers, strings]: [Array<number>, Array<string>] = partition(
values,
(x) => typeof x === "number",
);
std/http/file_server
の改善
serveDir()
にshowIndex
オプションが追加されています。false
を指定すると、リクエストでディレクトリが指定された際のindex.html
の自動配信が無効化されます。
#
などの予約後を名前に含むファイルがうまく配信されない問題が修正されています。
std/node
の改善
大きな変更として、Deno本体の--node-modules-dir
オプションをベースにchild_process.fork()
が再実装されています。
その他には、hash.digest()
での'base64url'
のサポートの追加や、tls.TLSSocket
/fs.open()
/child_process.spawnSync()
の互換性の向上などが実施されています。
https://github.com/denoland/deno_std/releases/tag/0.159.0
denoland/apiland
以下のリポジトリでdeno.landのバックエンドのソースが公開されました。
Denoに加えて、Google Cloud Datastore/Algoliaなどを活用して開発されているようです。
【TypeScript】Deno で匿名掲示板を作ろう! with upstash & supabase
Deno Deploy/Fresh/Supabase/Upstashなどを活用して匿名掲示板を作る連載記事が公開されています。