Deno 란 무엇이며 Node.js와 어떻게 다릅니까?(1)
본문
Node.js의 제작자 인 Ryan Dahl은 작년 반 동안 Node의 모든 고유 한 문제를 해결해야 하는 JavaScript의 새로운 런타임 인 Deno에서 작업했습니다.
오해하지 마십시오. Node는 광대한 생태계와 JavaScript 사용으로 인해 자체적으로 훌륭한 서버 측 JavaScript 런타임입니다. 그러나 Dahl은 보안, 모듈 및 종속성과 같은 몇 가지 사항에 대해 생각해야 할 것이 몇 가지 있음을 인정합니다.
그의 방어에서, 단기간에 플랫폼이 얼마나 성장할 것인지 상상할 수는 없었습니다. 또한 2009 년에도 JavaScript는 여전히 모든 사람이 재미있게 만든 이 이상한 작은 언어였으며 많은 기능이 아직 없었습니다.
https://blog.logrocket.com/what-is-deno/
Deno 란 무엇이며 주요 기능은 무엇입니까?
Deno는 JavaScript 용 Google 런타임 엔진인 V8을 기반으로 하는 안전한 Typescript 런타임입니다.
다음과 같이 만들어졌습니다.
- Rust (데노의 핵심은 Rust로, 노드는 C ++로 작성 됨)
- Tokio (Rust로 작성된 이벤트 루프)
- TypeScript (Deno는 기본적으로 JavaScript와 TypeScript를 모두 지원합니다)
- V8 (Chrome 및 Node에서 사용되는 Google JavaScript 런타임)
Deno가 제공하는 기능을 살펴 보겠습니다
보안 (권한)
Deno의 가장 중요한 기능 중 하나는 보안에 중점을 둡니다.
Node와 달리 Deno는 기본적으로 샌드 박스에서 코드를 실행하므로 런타임에 다음에 액세스 할 수 없습니다.
- 파일 시스템
- 네트워크
- 다른 스크립트의 실행
- 환경 변수
권한 시스템의 작동 방식을 살펴 보겠습니다.
(async () => {
const encoder = new TextEncoder();
const data = encoder.encode('Hello world\n');
await Deno.writeFile('hello.txt', data);
await Deno.writeFile('hello2.txt', data);
})();
이 스크립트는 hello txt 메시지와 함께 hello.txt와 hello2.txt라는 두 개의 텍스트 파일을 만듭니다. 코드는 샌드 박스 내에서 실행되므로 파일 시스템에 액세스 할 수 없습니다.
또한 노드에서와 마찬가지로 fs 모듈 대신 Deno 네임 스페이스를 사용하고 있습니다. Deno 네임 스페이스는 많은 기본 도우미 기능을 제공합니다. 네임 스페이스를 사용함으로써 우리는 브라우저 호환성을 잃어 가고 있습니다.
다음을 실행하여 실행할 때 :
deno run write-hello.ts
다음과 같은 메시지가 나타납니다.
Deno requests write access to "/Users/user/folder/hello.txt". Grant? [a/y/n/d (a = allow always, y = allow once, n = deny once, d = deny always)]
샌드 박스에서 호출 할 때마다 권한을 요청해야 하므로 실제로 두 번 프롬프트 됩니다. 물론 항상 허용 옵션을 선택하면 한 번만 요청됩니다.
거부 옵션을 선택하면 PermissionDenied 오류가 발생하고 오류 처리 논리가 없으므로 프로세스가 종료됩니다.
다음 명령으로 스크립트를 실행하면 :
deno run --allow-write write-hello.ts
프롬프트가 없고 두 파일이 모두 작성됩니다.
파일 시스템에 대한 --allow-write 플래그 외에도 네트워크 요청을 활성화하고 환경에 액세스하며 하위 프로세스를 실행하기 위한 --allow-net, --allow-env 및 --allow-run 플래그도 있습니다.
모듈
Deno는 브라우저와 마찬가지로 URL로 모듈을 로드합니다. 많은 사람들이 서버 측에 URL이 있는 import 문을 보았을 때 처음에는 혼란스러웠지만 실제로는 이해가 됩니다.
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
URL로 패키지를 가져 오는 데 가장 큰 문제는 무엇입니까? 대답은 간단합니다. URL을 사용하면 최근 많은 문제가 발생한 npm과 같은 중앙 집중식 레지스트리없이 Deno 패키지를 배포 할 수 있습니다.
URL을 통해 코드를 가져 오면 패키지 작성자가 원하는 곳 어디에서나 코드를 호스팅 할 수 있습니다. 더 이상 package.json 및 node_modules가 없습니다.
응용 프로그램을 시작하면 Deno는 가져온 모든 모듈을 다운로드하고 캐시합니다. 일단 캐시되면 Deno는 --reload 플래그로 특별히 요청할 때까지 다시 다운로드하지 않습니다.
여기에 몇 가지 중요한 질문이 있습니다.
- 이전글Deno 란 무엇이며 Node.js와 어떻게 다릅니까?(2) 19.08.08
- 다음글CSS 축소를 위한 완벽한 모범 사례(5) 19.08.08