はじめに
Deno@v1.4.0がリリースされました。
このリリースには多くの新機能が含まれています。
この記事ではそれらの新機能について紹介します。
まとめ
- テストカバレッジの出力がサポートされた
-
deno run
コマンドで--watch
フラグがサポートされた - WebSocket APIが実装された
-
--unstable
フラグを付与すると、isolatedModules
及びimportsNotUsedAsValues: error
オプションが有効化されるようになった -
deno install
コマンドでインストールしたスクリプトがバンドルされるようになった -
deno fmt
及びdeno lint
がチェックしたファイル数を表示するようになった -
console.log
でCSSによるスタイリングがサポートされた
テストカバレッジの出力がサポートされた
deno test
コマンドにテストカバレッジのサポートが追加されました。
deno test
コマンドを実行する際に、--coverage
及び--unstable
オプションを付与することで、テストカバレッジが出力されます。
$ deno test -A --coverage --unstable
Debugger listening on ws://127.0.0.1:9229/ws/d0d8502d-422f-4257-aa2a-db380af200e6
running 9 tests
test Application#evaluate ... ok (94ms)
test Application#exposeFunction ... ok (116ms)
test Application#onExit ... ok (78ms)
test Application#serveFolder ... ok (173ms)
test Application#serveFolder with prefix ... ok (199ms)
test custom executablePath ... ok (4ms)
test Chrome#evaluate ... ok (112ms)
test Chrome#load ... ok (119ms)
test Chrome#bind ... ok (106ms)
test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (1002ms)
test coverage:
file:///home/uki00a/ghq/github.com/uki00a/carol/deps.ts 100.000%
file:///home/uki00a/ghq/github.com/uki00a/carol/test_util.ts 82.609%
file:///home/uki00a/ghq/github.com/uki00a/carol/mod.ts 96.429%
file:///home/uki00a/ghq/github.com/uki00a/carol/chrome.ts 90.769%
file:///home/uki00a/ghq/github.com/uki00a/carol/locate.ts 53.488%
file:///home/uki00a/ghq/github.com/uki00a/carol/application.ts 88.462%
file:///home/uki00a/ghq/github.com/uki00a/carol/transport.ts 77.500%
file:///home/uki00a/ghq/github.com/uki00a/carol/logger.ts 87.500%
現時点(v1.4.0)では上記のようなテキスト形式の出力のみがサポートされます。将来的には、lcov
やjson
のようなフォーマットもサポートが検討されているようです。
deno run
コマンドで--watch
フラグがサポートされた
次のように、deno run
コマンドを実行する際に--watch
及び--unstable
オプションを付与することで、Denoが指定されたファイルを監視します。そのファイル及び依存ファイルに変更が発生する度に、ソースコードの再コンパイル及び再実行が行われます。
$ deno run --watch --unstable sample.ts
現時点ではdeno run
コマンドのみが--watch
オプションをサポートしていますが、将来的にはdeno test
等にも追加される見込みのようです。
WebSocket APIが実装された
Web標準に準拠したWebSocket APIが実装されました。使用する際は--allow-net
フラグを指定する必要があります。
const ws = new WebSocket("ws://localhost:8080");
ws.addEventListener("open", () => {
ws.send("Hello");
});
ws.addEventListener("error", (e) => {
console.error(e);
});
ws.addEventListener("message", (e) => {
console.log(e);
ws.close();
});
ws.addEventListener("close", () => {
console.log("closed");
});
この変更に伴い、std/ws
モジュールで提供されていたWebSocketクライアント(connectWebSocket関数)は削除されました。(WebSocketサーバについては、従来どおりstd/ws
モジュールで提供されます)
参考
--unstable
オプションを付与すると、isolatedModules
及びimportsNotUsedAsValues: error
オプションが有効化されるようになった
現時点では--unstable
オプションを指定したときのみ、これらのオプションが有効化されます。将来的には、--unstable
オプションの有無に関わらず、デフォルトでこれらのオプションが有効化される見込みのようです。
この変更により、次のような影響があります。(--unstable
オプションを指定したときのみ)
interface
やtype
等をimportする際はimport type
を使う必要がある
// NG🙅♂️
import { Application } from "./application.ts";
// OK🙆♂️
import type { Application } from "./application.ts";
interface
やtype
等を再exportする際はexport type
を使う必要がある
// NG🙅♂️
export { Hoge } from "./hoge.ts";
// OK🙆♂️
export type { Hoge } from "./hoge.ts";
参考
-
isolatedModules
及びimportsNotUsedAsValues
オプションについて
deno install
コマンドでインストールしたスクリプトがバンドルされるようになった
追記) いくつかのスクリプトのインストールで問題が発生したため、この変更はv1.4.1でrevertされました。現在、swcを使ってdeno bundle
コマンドの再実装が行われており、それが完了次第、この変更は再度denoに取り込まれる見込みのようです(#7461)
deno install
でインストールしたスクリプトが、その依存関係等も含め、単一のJSファイルにbundleされるようになりました。
これにより、ユーザがスクリプトの依存モジュールを再読込した際に、意図せずしてスクリプトが壊れてしまう問題を回避できるなどの利点があるようです。
deno fmt
及びdeno lint
がチェックしたファイル数を表示するようになった
deno fmt
及びdeno lint
を実行した際に、チェックが行われたファイル数が表示されるようになりました。
これによって、ちゃんとチェックが行われたかどうか分かりやすくなっています。
$ deno fmt
Checked 13 files
# v1.4.0以前は、エラーがなければ何も表示されなかった
console.log
でCSSによるスタイリングがサポートされた
%c
を使うことで、CSSによるスタイリングができるようになりました。
以下のコードを実行すると、Deno
という文字の色が緑に、背景色が青で表示されます。
console.log("Hello %cDeno", "color: green; background-color: blue");
現時点では、以下のスタイルがサポートされています。
color
background-color
font-weight
font-style
text-decoration-color
text-decoration-line
スタイリングを無効化したいときは、環境変数NO_COLOR
にtrue
を設定します。