BETA

deno v0.34.0の変更点まとめ

投稿日:2020-02-23
最終更新:2020-02-23

概要

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/[email protected]/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/[email protected]/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/[email protected]/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

その他の修正点

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@uki00aの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう