LoginSignup
2
0

More than 3 years have passed since last update.

deno v0.34.0の変更点まとめ

Last updated at Posted at 2020-02-23

概要

denoのv0.34.0がリリースされたため、変更点をまとめます。

Breaking Changes

TypeScriptのstrictモードが有効化された

既存のコードについては、denoをv0.34.0にアップグレードすると、コンパイルが通らなくなる可能性があります。

strictモードについてはこちら--strictオプションの欄に記載されています。

新機能等

(std/node/events) on関数がサポートされた

Node.jsのeventsモジュールのポリフィルにon関数が実装されました。

import { EventEmitter, on } from "https://deno.land/std@v0.34.0/node/events.ts";

const emitter = new EventEmitter();

let count = 0;
const timer = setInterval(() => {
  count += 1;
  if (count === 3) {
    clearInterval(timer);
  }
  emitter.emit('hoge', count);
}, 1000);

for await (const x of on(emitter, 'hoge')) {
  console.log(x);
  // [ 1 ]
  // [ 2 ]
  // [ 3 ]
}

Deno.makeTempFileが実装された

一時ファイルを作成するための関数が実装されました。

オプションの形式は、Deno.makeTempDirと同様です。

使用する際は、--allow-writeフラグを指定する必要があります。

try {
  await Deno.makeTempFile({ prefix: "test_" });
} catch (error) {
  console.error(error);
}

Compiler APIでlibオプションがサポートされた

Compiler APIからlib.dom.d.ts等のライブラリファイルが読み込めるようになりました。

v0.33.0までは、ライブラリファイルを読み込む手段がなかったため、DOM APIを利用したコードをコンパイルしようとすると、エラーが発生してしまいました。

v0.33.0
const [diagnostics] = await Deno.compile(
  "mod.ts",
  {
    "mod.ts": "document.getElementById('hoge');"
  }
);
console.log(diagnostics);
// [ { message: "Cannot find name 'document'. Do you need to change your target library? Try changing the `lib` compi...", code: 2584, category: 3, startPosition: 0 } ]

v0.34.0以降では、libオプションで読み込むライブラリを指定できます。

v0.34.0
const [diagnostics] = await Deno.compile(
  "mod.ts",
  {
    "mod.ts": "document.getElementById('hoge');"
  },
  {
    lib: ["esnext", "dom"]
  }
);

--certオプションがサポートされた

deno run等を実行する際に--certオプションでPEM形式の証明書を指定できます。

(std/io/bufio.ts)readDelim/readStringDelim/readLinesがexportされた

readDelimを使うと、指定したデリミタで入力を分割してくれます。

import { readDelim } from "https://deno.land/std@v0.34.0/io/bufio.ts";

const encoder = new TextEncoder();
const decoder = new TextDecoder();
const buffer = new Deno.Buffer(encoder.encode("hoge,fuga,piyo"));
for await (const c of readDelim(buffer, encoder.encode(","))) {
  console.log(decoder.decode(c));
  // hoge
  // fuga
  // piyo
}

readStringDelimを使用すると、上記のコードをより簡潔に記述できます。

import { readStringDelim } from "https://deno.land/std@v0.34.0/io/bufio.ts";

const encoder = new TextEncoder();
const buffer = new Deno.Buffer(encoder.encode("hoge,fuga,piyo"));
for await (const c of readStringDelim(buffer, ",")) {
  console.log(c);
}

readLinesreadStringDelim(reader, "\n")の呼び出しと等価です。

deno testでディレクトリを指定してテストを実行できるようになった

その他の修正点

2
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
2
0