Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

deno v0.34.0の変更点まとめ

More than 1 year has passed since last update.

概要

https://github.com/denoland/deno/releases/tag/v0.34.0

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

Breaking Changes

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

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

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

https://github.com/denoland/deno/pull/3899

新機能等

(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 ]
}

https://github.com/denoland/deno/pull/4016

Deno.makeTempFileが実装された

https://github.com/denoland/deno/pull/4024

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

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

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

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

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

https://github.com/denoland/deno/pull/3863

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形式の証明書を指定できます。

https://github.com/denoland/deno/pull/3972

(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")の呼び出しと等価です。

https://github.com/denoland/deno/pull/4019

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

https://github.com/denoland/deno/pull/4011

その他の修正点

uki00a
Deno🦕 / Node.js / Go
https://scrapbox.io/uki00a/uki00a
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away