Deno v2.0.0-rc.5/v2.0.0-rc.6/v2.0.0-rc.7がリリース
Denoのv2.0.0rc.5〜v2.0.0 rc.7がリリースされています:
--allow-import
の導入
--allow-import
という新しいパーミッションフラグが導入されています (短縮形式は-I
)
Deno v2からリモートモジュールの読み込みを許可するホストに制限がかかるようです。必要に応じて--allow-import
にリモートモジュールの読み込みを許可するホストを指定する必要があります。
ただし、デフォルトで以下のホストからのモジュールのimport
が許可されるようなので、基本的なケースにおいては今まで通り利用できると思われます:
例えば、unpkg.comからモジュールをimport
しようとすると、上記のいずれのホストにも当てはまらないため、権限が要求されます:
import ky from "https://unpkg.com/ky@1.7.2";
const res = await ky.get("https://api.github.com/repos/uki00a/deno-weekly").json();
この場合、以下のように権限が求められます:
$ deno run --allow-net main.js
┏ ⚠️ Deno requests import access to "unpkg.com:443".
┠─ Requested by `import()` API.
┠─ Learn more at: https://docs.deno.com/go/--allow-import
┠─ Run again with --allow-import to bypass this prompt.
┗ Allow? [y/n/A] (y = yes, allow; n = no, deny; A = allow all import permissions) >
--allow-import
によってunpkg.com
を明示的に許可すると、権限が求められなくなります:
$ deno run --allow-net --allow-import=unpkg.com main.js
ただし、--allow-import
を明示した場合、デフォルトで許可されるdeno.land
やjsr.io
などのホストに対しても権限が必要となるため、必要に応じてそれらのホストも許可する必要がありそうです:
# unpkg.comとjsr.ioからのimportのみを許可します
$ deno run --allow-net --allow-import=unpkg.com,jsr.io main.js
また、deno run
の引数でリモートのURLが指定された場合、デフォルトでそのホストからのimport
が許可されるようです。
破壊的変更
deno.json
deno.json
のimportMap
オプションでのリモートのImport mapsの指定が廃止されました。(もし需要があれば、今後、よりセキュアな方法によって再度サポートを導入することも考慮されているようです)
--import-map
などでは引き続きリモートのImport mapsが指定できるので、そちらへの移行が推奨されます。
Deno.UnsafeWindowSurface
Deno.UnsafeWindowSurface
のconstructor
のシグネチャーが変更されています。引数として単一のoptions
引数を受け取るように変更されており、必須のオプションとしてwidth
とheight
が追加されています。
この変更に合わせて、GPUCanvasConfiguration
からwidth
とheight
プロパティーが削除されています。
Deno.errors.BadResource
について
今まで以下のエラーについてDeno.errors.BadResource
がthrow
されていましたが、代わりにDeno.errors.Busy
がthrow
されるように挙動が変更されています:
TCP stream is currently in use
Listener is currently in use
UNIX stream is currently in use
(エラーメッセージもUnix socket is currently in use
に変更されています)
deno fmt
HTML/CSS/YAMLサポートの安定化
Deno v1.46で導入されたdeno fmt
のCSS/HTML/YAMLサポートが安定化されました。--unstable-css
などのオプションやdeno.json
での"unstable": ["fmt-html"]
の指定などをせずとも、これらの形式のファイルがフォーマットされます。
deno fmt --check
CSS/HTML/YAML形式のファイルに対してdeno fmt --check
を実行すると、常にエラーとして扱われてしまう問題も修正されています。
NunjucksとVentoのサポート
deno fmt
で.njk
と.vto
形式がサポートされています。これらの形式のファイルをフォーマットするには--unstable-component
の指定が必要です。
deno add
deno add
でnpmパッケージを追加する際に、バージョンが省略された場合はデフォルトでlatest
タグに設定されたバージョンがインストールされるよう振る舞いが変更されています
deno compile
RCバージョンでもdeno compile
が動作するように改善されています。
TypeScript
compilerOptions.noImplicitOverride
リモートモジュールに対してcompilerOptions.noImplicitOverride
が適用されないよう挙動が修正されています。
Node.js互換性の改善
--node-modules-dir
--node-modules-dir
オプションに値が指定されなかった場合、--node-modules-dir
が無視されてしまっていた問題が修正されています。auto
がデフォルト値として使われます。
静的解析が困難なCJSモジュールの取り扱いが改善
静的な解析が困難なCJSファイルのimport
時にエラーが発生する問題が改善されています。
主にRsbuildの動作に向けた対応のようです。
また、Denoの公式ドキュメントにCommonJSサポートに関する解説が追加されています。
Conditional exportsサポートの改善
Conditional exportsで"node"
に指定されたパスが解釈されるよう振る舞いが改善されています。
これがサポートされていなかったことで、nuxt build
によって生成されたサーバーをDenoで動かせない問題があったようです。
require(esm)
ESM形式のモジュールをrequire
しようとするとパニックすることがある問題が改善されています。
process.stdin.pause
create-viteがハングする問題を解消するため、process.stdin.pause
の振る舞いが修正されています。
CLI
サブコマンドよりも前の位置にDenoのCLI引数(--allow-net
など)が指定された際に、エラーが発生するように振る舞いが改善されています (今までは単純に無視されていたようです)
$ deno --allow-read run main.js
error: unexpected argument '--allow-read' found
tip: 'run --allow-read' exists
Usage: deno run [OPTIONS] [SCRIPT_ARG]...
--allow-all
に関する振る舞いの変更
--allow-all
とその他の--allow-*
フラグが併用された際に、エラーが発生するように振る舞いが変更されています
Web API
globalThis.location
globalThis.location
がconfigurable: true
に変更されています。主にVitest 2の動作に向けた対応のようです。
Web Crypto API
SubtleCrypto
のimportKey
とexportKey
でP521 EC鍵がサポートされています。
@deno/vite-plugin
Deno公式からViteプラグインが公開されています:
- パッケージ: @deno/vite-plugin
- リポジトリ: denoland/deno-vite-plugin
npm:
/jsr:
/https:
のサポートや、deno.json
で定義されたImport mapsの解決などがサポートされているようです。
deno_std
のリリース
deno_std
がリリースされています (release-2024.09.24)
@std/archive@0.225.4
@std/archive@0.225.4がリリースされています。
@std/archive
が非推奨化されており、今後は@std/tar
への移行が推奨されます。
@std/io@0.224.9
@std/io@0.224.9がリリースされています。
以下のAPIが非推奨化されており、@std/streamsへの移行が推奨されています:
非推奨化されたAPI | 移行先 |
---|---|
BufWriter | Buffer (@std/streams/buffer ) |
BufReader | Buffer (@std/streams/buffer ) |
StringWriter | Buffer.writable (@std/streams/buffer ) |
StringReader | Buffer (@std/streams/buffer ) |
LimitedReader | LimitedBytesTransformStream (@std/streams/limited-bytes-transform-stream ) |
MultiReader | mergeReadableStreams (@std/streams/merge-readable-streams ) |
readDelim | ByteSliceStream (@std/streams/byte-slice-stream ) |
readLong | - |
readRange | ByteSliceStream (@std/streams/byte-slice-stream ) |
readInt | - |
readShort | - |
sliceLongToBytes | - |
readStringDelim | TextDelimiterStream (@std/streams/text-delimiter-stream ) |
copyN | ByteSliceStream (@std/streams/byte-slice-stream ) |
readLines | toLines (@std/streams/unstable-to-lines ) |
@std/collections@1.0.7
@std/collections@1.0.7がリリースされています。
配列を引数として受け取る各種APIでIterable
をサポートするための対応が行われています。現状では、Iterable
のサポートはunstable-
プレフィックスがついたモジュールから利用できます:
sample
(@std/collections/unstable-sample
)withoutAll
(@std/collections/unstable-without-all
)chunk
(@std/collections/unstable-chunk
)sortBy
(@std/collections/unstable-sort-by
)takeWhile
(@std/collections/unstable-take-while
)
@std/http@1.0.7
@std/http@1.0.7がリリースされています。
@std/http/unstable-routeのRoute.method
に配列で複数のメソッドを指定できるように改善されています。
@std/expect@1.0.4
@std/expect@1.0.4がリリースされています。
expect.hasAssertions()が実装されています。
@std/streams@1.0.6
@std/streams@1.0.6がリリースされています。
新しいAPIとしてtoBytes
(@std/streams/unstable-to-bytes
)が追加されています。ReadableStream<Uint8Array>
を受け取り、そこから読み込まれたデータを結合して結果をPromise<Uint8Array>
として返却してくれます。
@std/assert@1.0.6
@std/assert@1.0.6がリリースされています。
各種assert*
関数でabstract class
を引数として受け取れるように型定義が改善されています。
@std/text@1.0.7
@std/text@1.0.7がリリースされています。
levenshteinDistance
(@std/text/levenshtein-distance
)においてU+FFFFよりも大きいコードポイントが適切に取り扱われない問題が修正されています。
@types/deno
DefinitelyTypedに@types/deno
パッケージが追加されています:
DenoのAPIに関する型定義が提供されるようです。
Deno 2.0 rcでreactとnext.jsの設定を試す
Deno v2.0.0-rc.4を使ってNext.jsを動作させる記事が公開されています:
Slack Platform(Deno)を活用したインシデント対応標準化の取り組み
Slackの開発プラットフォームとDenoの活用に関する記事が公開されています:
rusty_v8
の安定版がリリース
deno_coreの内部で使用されているrusty_v8
の安定バージョンが公開されたようです:
これに合わせてバージョニングに関する方針が変更されるようで、今後はChromeのバージョニングと同様の方式で運用が行われるようです。例えば、rusty_v8 v129.0.0ではChrome v129に合わせてV8のv12.9.a.b
が使用されるようです。