はじめに
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");
現時点では、以下のスタイルがサポートされています。
colorbackground-colorfont-weightfont-styletext-decoration-colortext-decoration-line
スタイリングを無効化したいときは、環境変数NO_COLORにtrueを設定します。
