Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8832

Denoのマニュアルで気になった所を試してみる

$
0
0

Deno

公式ページ

最近よく目にするので、何はともあれ触ってみようかという事で
マニュアルを元にザッと気になる所を試して見たいと思います。

:computer:環境構築

Denoの公式Docker(?)を見つけたのでそちらで環境を構築して見たいと思います。
https://hub.docker.com/r/hayd/deno

ワンランナーでさくっと試してみます。

$ docker run --rm-it hayd/alpine-deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

:thumbsup:

:pencil:色々試してみる

簡単なサンプル

公式にも載っていた以下サンプルをローカルに server.tsとして作成し、起動させてみます。

import{serve}from"https://deno.land/std@0.50.0/http/server.ts";consts=serve({port:8000});console.log("http://localhost:8000/");forawait(constreqofs){req.respond({body:"Hello World\n"});}
$ docker run --rm-it--init-p 8000:8000 -v$PWD:/app hayd/alpine-deno run /app/server.ts
...
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag

Premissionが無いと怒られました。Denoはデフォルトでファイル、ネットワーク、環境変数等のアクセスが
許可されてないので、--allow-netを付けて再度実行してみます。

$ docker run --rm-it--init-p 8000:8000 -v$PWD:/app hayd/alpine-deno run --allow-net /app/server.ts

今度は実行でき http://localhost:8000/にアクセスするとちゃんと Hello Worldが返ってきました :sparkles:

ファイル読み込み

こちらを試して見たいと思います。
cat.tsとして以下を作成します。

constfilenames=Deno.args;for(constfilenameoffilenames){constfile=awaitDeno.open(filename);awaitDeno.copy(file,Deno.stdout);file.close();}

読み込み用のファイル sample.txtを以下の内容で作成。

Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

デフォルトだとファイル読み込みもPremissionが無いので --allow-readを付けて実行します。

$ docker run --rm-it--init-v$PWD:/app hayd/alpine-deno run --allow-read /app/cat.ts /app/sample.txt
> Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

ちゃんと読み込めてそうです :sparkles:

dependency inspectorformatter

Denoには dependency inspectorformatterがビルドインされているらしいので試してみます。

  • dependency inspector

    $ docker run --rm-it--init hayd/alpine-deno info
    DENO_DIR location: "/deno-dir/"
    Remote modules cache: "/deno-dir/deps"
    TypeScript compiler cache: "/deno-dir/gen"

    remoteから取得したmoduleとTypescriptコンパイル時のキャッシュ場所を教えてくれてます :sparkles:

  • formatter

    $ docker run --rm-it--init-v$PWD:/app hayd/alpine-deno fmt

テスト

こちらもビルドインでtest runnerが入っているらしいです。至れり尽くせり :sparkles:
https://deno.land/manual/testing

simple.test.ts
import{assertEquals}from"https://deno.land/std/testing/asserts.ts";Deno.test("simple",()=>{constx=1+2;assertEquals(x,3);});

実行!

$ docker run --rm-it--init-v$PWD:/app hayd/alpine-deno test /app/simple.test.ts
running 1 tests
test simple ... ok (3ms)test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (4ms)

Debugger

https://deno.land/manual/tools/debugger
V8 Inspector Protocolをサポートしている

先ほどのファイル読み込みのサンプルをDebugして見たいと思います。
--inspect-brkを付けて最初の1行目でブレークする様にします。

$ docker run --rm-it--init-p 9229:9229 -v$PWD:/app hayd/alpine-deno run --inspect-brk=0.0.0.0:9229 --allow-read /app/cat.ts /app/sample.txt
Debugger listening on ws://127.0.0.1:9229/ws/xxxxx

Chromeで chrome://inspectにアクセスして

↑のinspectをクリックすると

デバッグできました :sparkles:

また、試せては無いですが、VSCode上でもデバッグ可能らしいです。
https://deno.land/manual/tools/debugger#vscode

VSCodeの拡張機能

Deno - Visual Studio Marketplace

:bomb:バッドノウハウ

  • Debugger使用時にchromeでinspectが表示されない :warning:
    • docker使用する場合だと --inspect-brkだけではダメで --inspect-brk=0.0.0.0:9229と指定しないといけない

:sparkles:感想

  • ビルドインで色々入っているので便利
  • 外部パッケージをURLでインポートできるのはサクッと試せるので便利
  • いきなりNodeのプロジェクトをDenoに置き換えるのは厳しそうだが、新規のプロジェクトや単独の小さなモジュールとかで使ってみたい

:link:参考になったURL


Viewing all articles
Browse latest Browse all 8832

Trending Articles