Deno는 Node입니다.js와 어디가 다른지 대략적으로 정리해 봤어요.🦕

8378 단어 JavaScriptdeno

2020년 5월 13일, 드디어ver1.0 출시Deno.
Node.js와의 차이를 대략적으로 설명해 주세요.
※ 이하 본 기사의 내용은 Deno 공식 브로셔의 기술에서

도대체 디노가 뭐야?


Deno는 JavaScript와 TypeScript의 실행 환경입니다.
V8, Rust 및 Tokio에서 제작됩니다.

응, 노드.js 있지 않아요?


Node.js는 2009년에 탄생했고 10년이 넘는 역사를 가지고 있다.
예를 들면 Node입니다.js가 태어났을 때 이 세상에는 프로미스가 없었다.
2012년에 Type Script가 탄생했습니다.
10년 동안 자바스크립트를 둘러싼 환경이 많이 달라졌다.
그리고 2020년.
Node.js 문제를 해결하기 위해 더 좋은 개발 환경을 제공합니다.js의 개발자 라이언 달 등의 손으로 탄생한 것은 디노(Deno는 Node의 Anaggram)다.

Deno는 Node입니다.js랑 뭐가 달라요?


npm 사용 안 함


모듈은 URL이나 파일 경로에서 다운로드됩니다.

import {hoge} from "fuga";
이런 노드.js의 기술 형식은 지정한 모듈이 어디에 있는지 알 수 없는 문제를 일으켰습니다.fuga 모듈은 NPM 서버 또는 로컬node_modules 폴더에 있을 수 있습니다.
import {hoge} from "https://your.domain.com/fuga.ts";
fuga 라이브러리의 위치가 유일하다.
이와 함께 package.json에 해당하는 장치가 필요하지 않다는 뜻이기도 하다.
만약 URL과 파일 경로가 그대로 버전을 지정했다면, 일부러 다른 파일로 이러한 의존성 정보를 관리할 필요가 없을 것이다.

TypeScript 표준 지원


추가 라이브러리 없이 Type Script가 컴파일됩니다.
컴파일링은 자동으로 진행되기 때문에 명령을 내릴 필요가 없다.

안전


명확한 허가를 받지 않으면 deno는 네트워크 연결과 파일을 읽을 수 없습니다.
예를 들어 표준 라이브러리로 공개된curl.ts에서 URL에 접근하려고 시도하면 오류가 답장됩니다.

$> deno run https://deno.land/std/examples/curl.ts https://example.com
error: Uncaught PermissionDenied: network access to "https://example.com/", run again with the --allow-net flag
URL에 액세스하려면 연결이 허용되는 도메인을 --allow-net 플래그로 설정해야 합니다.

deno run --allow-net=example.com https://deno.land/std/examples/curl.ts https://example.com
잘 알려지지 않은 NPM 패키지를 실행했다면 이상한 URL에 연결되거나 파일 시스템에 닿지 않았을까...이런 공포는 여기까지다.
세부 사항: https://deno.land/manual/getting_started/permissions

표준 테스트 주자가 있어요.

Deno.test 프로그램 라이브러리를 설치하지 않은 상태에서 테스트를 실행할 수 있습니다.
Deno.test("Hello deno test", () => {
  const foo: string = "Hello";
  if (foo !== "Hello") {
    throw ("foo should be Hello.");
  }
});
결단고도 마련했다.
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
Deno.test("Hello assertion", () => {
  const foo: string = "Hello";
  assertEquals(foo, "Hello");
});
실행 시 deno test [files]명령만 걸면 됩니다.간단해!
세부 사항: https://deno.land/manual/testing

비동기 동작 모두 Promise로 돌아가기


웹 서버를 설명할 때 노드입니다.js에서는 이런 느낌이에요.

var http = require('http');

http.createServer(function (req, res) {
  res.write('Hello World!');
  res.end();
}).listen(8080);
출전: https://www.w3schools.com/nodejs/nodejs_http.asp
데노에서 사용await하면 이런 느낌이에요.

import { serve } from "https://deno.land/std/http/server.ts";
const s = serve({ port: 8080 });
for await (const req of s) {
  req.respond({ body: "Hello World!\n" });
}
출전: https://deno.land/std/http

예기치 않은 오류 발생 시 항상 처리 종료


Uncaught Exceptions in Node 등의 글에서 보듯이 노드.js에서 포착할 수 없는 오류를 어떻게 처리하는지는 개발자가 결정합니다.
처리를 종료하거나 취소할 수 있습니다.
Deno에서 처리는 항상 끝납니다.항상.


Node.js가 존재하는 문제점과 디노가 추구하는 목표에 대해 리안 달의 발표회를 통해 쉽게 이해할 수 있다.
Node.js에 대한 10가지 반성점 Ryan Dahl-JSconf EU 2018

좋은 웹페이지 즐겨찾기