Deno가 무엇인지, Node와 무엇이 다른지.js?


Ryan Dahl, Node의 창립자.js는 지난 1년 반 동안 Deno을 개발해 왔습니다. 이것은 새로운 자바스크립트가 실행될 때 Node의 모든 고유한 문제를 복구하는 데 사용됩니다.
오해하지 마세요. Node 자체가 훌륭한 서버 사이드인 자바스크립트가 실행될 때 이것은 주로 방대한 생태계와 자바스크립트의 사용 때문입니다.그러나 달은 안전성, 모듈, 의존성 등 더 많은 것을 고려해야 한다고 인정했다.
그의 변호에서 그는 플랫폼이 이렇게 짧은 시간 안에 얼마나 늘어날지 상상할 수 없었다.그리고 2009년에도 자바스크립트는 모두가 놀리는 이상한 작은 언어로 그 많은 기능이 아직 나타나지 않았다.

Deno란 무엇이며 주요 특징은 무엇입니까?


Deno는 V8 기반의 보안 Typescript가 실행될 때, V8은 구글 자바스크립트가 실행될 때 엔진이다.
그것은 다음과 같은 재료로 만들어졌다.
  • Rust(Deno의 핵심은 Rust로, 노드는 C++로 작성)
  • Tokio(Rust로 작성된 이벤트 루프)
  • TypeScript(Deno 지원 JavaScript 및 기존 TypeScript)
  • V8 (구글의 JavaScript 실행 시 Chrome과 Node 등에 사용됨)
  • 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.txthello2.txt이라는 두 개의 텍스트 파일을 만들었습니다. 이 파일에는 Hello world 메시지가 포함되어 있습니다.코드가 샌드박스에서 실행되기 때문에 파일 시스템에 접근할 수 없습니다.
    또한 우리가 사용하는 것은 deno 명칭 공간이지 fs 모듈이 아니다. 우리가 Node에서 사용하는 것처럼.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)]
    
    실제로 우리는 샌드박스에서 온 모든 호출은 허가를 요청해야 하기 때문에 두 번의 힌트를 받았다.물론 allow always 옵션을 선택하면 한 번만 문의받을 수 있습니다.deny 옵션을 선택하면 PermissionDenied 오류가 발생하고 프로세스가 종료됩니다. 오류 처리 논리가 없기 때문입니다.
    다음 명령을 사용하여 스크립트를 실행하는 경우
    deno run --allow-write write-hello.ts
    
    프롬프트가 없습니다. 두 파일 모두 생성되었습니다.
    파일 시스템의 --allow-write 로고를 제외하고 --allow-net, --allow-env, --allow-run 로고가 있는데 각각 네트워크 요청, 액세스 환경과 하위 프로세스를 실행하는 데 사용된다.

    모듈


    Deno는 브라우저와 마찬가지로 URL을 통해 모듈을 로드합니다.처음에 많은 사람들이 서버에서 URL이 있는 가져오기 문구를 보았을 때 곤혹스러웠지만, 사실은 일리가 있었다. 내 말을 잘 들어라.
    import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
    
    URL을 통해 가방을 가져오는 것이 뭐 그리 대단한 일인지 물어볼 수도 있습니다.답은 간단합니다. URL을 사용하면 집중식 등록표(예를 들어 npm) 없이 데노백을 배포할 수 있습니다. 최근에 문제가 많이 발생했습니다. 이 모든 것을 설명합니다.
    URL을 통해 코드를 가져오면 패키지 작성자가 적합하다고 생각하는 모든 곳에서 코드를 관리할 수 있습니다. 가장 좋은 중심화입니다.더 이상 package.jsonnode_modules이 없습니다.
    우리가 프로그램을 시작할 때, Deno는 가져온 모든 모듈을 다운로드하고 캐시합니다.일단 캐시가 되면, Deno는 --reload 로고를 사용해서 명확하게 요구할 때까지 다시 다운로드하지 않습니다.
    여기에는 몇 가지 중요한 질문이 있다.

    만약 사이트가 다운되면 어떻게 합니까?


    이것은 집중적인 등록표가 아니기 때문에, 이 모듈을 위탁 관리하는 사이트는 여러 가지 이유로 폐쇄될 수 있다.이것은 개발 과정에서, 또는 더 나쁜 것은 생산 과정에서 상승 상태에 있다는 것에 달려 있다. 이것은 위험이 있다.
    앞에서 언급한 바와 같이 Deno 캐시 다운로드 모듈입니다.캐시가 로컬 디스크에 저장되어 있기 때문에, Deno 작성자는 버전 제어 시스템(즉git)에서 검사를 하고 저장소에 저장하는 것을 권장합니다.이렇게 하면 사이트가 닫혀도 모든 개발자가 다운로드한 버전에 접근할 수 있다.
    Deno는 $DENO_DIR 환경 변수에 지정된 디렉토리에 캐시를 저장합니다.만약 우리가 스스로 변수를 설정하지 않는다면, 그것은 시스템의 기본 캐시 디렉터리로 설정될 것이다.로컬 저장소 어딘가에 $DENO_DIR을 설정하고 버전 제어 시스템에 검사할 수 있습니다.

    URL을 통해 계속 가져와야 합니까?


    URL을 계속 입력하면 지루합니다.고맙게도 데노는 우리에게 이렇게 하지 않는 두 가지 선택을 제공했다.
    첫 번째 옵션은 다음과 같이 로컬 파일에서 가져온 모듈을 다시 내보내는 것입니다.
    export { test, assertEquals } from "https://deno.land/std/testing/mod.ts";
    
    위의 파일 이름이 local-test-utils.ts이라고 가정하십시오.현재 test 또는 assertEquals 함수를 다시 사용하려면 다음과 같이 참조할 수 있습니다.
    import { test, assertEquals } from './local-test-utils.ts';
    
    따라서 URL에서 로드할지 여부는 중요하지 않습니다.
    두 번째 옵션은 JSON 파일에서 지정한 가져오기 맵을 만드는 것입니다.
    {
       "imports": {
          "http/": "https://deno.land/std/http/"
       }
    }
    
    그런 다음 가져오기
    import { serve } from "http/server.ts";
    
    작업을 수행하려면 --importmap 플래그를 포함하여 맵 가져오기에 대한 Deno 정보를 알려야 합니다.
    deno run --importmap=import\_map.json hello\_server.ts
    

    그럼 가방 버전 컨트롤은요?


    버전 제어는 패키지에서 프로그램을 지원해야 하지만 클라이언트의 경우 URL에 버전 번호: https://unpkg.com/[email protected]/dist/liltest.js만 설정하면 됩니다.

    브라우저 호환성


    Deno는 브라우저와 호환되도록 설계되었습니다.기술적으로 말하자면, ES 모듈을 사용할 때, 우리는 웹 팩과 같은 구축 도구를 사용해서 응용 프로그램이 브라우저에서 사용할 수 있도록 할 필요가 없다.
    그러나 Babel과 같은 도구는 코드를 자바스크립트의 ES5 버전으로 전송하기 때문에 이 언어의 모든 최신 기능을 지원하지 않는 낡은 브라우저에서도 코드를 실행할 수 있다.그러나 이것은 최종 파일에 대량의 불필요한 코드를 포함하고 출력 파일을 팽창시키는 대가이기도 하다.
    이것은 우리가 우리의 주요 목표가 무엇인지를 결정하고 해당하는 선택을 하는 데 달려 있다.

    기존 TypeScript 지원


    Deno를 사용하면 구성 파일이 필요 없이 TypeScript를 쉽게 사용할 수 있습니다.그럼에도 불구하고 순수한 JavaScript로 프로그램을 작성하고 Deno로 실행하는 것은 가능하다. 아무런 문제가 없다.

    총결산


    Deno는 TypeScript와 JavaScript가 새로 실행되었을 때 흥미로운 프로젝트로 상당 기간 안정적으로 성장했습니다.그러나 생산 준비로 간주되기 전까지는 아직 갈 길이 멀다.
    분산된 방법을 통해 자바스크립트 생태계를 중앙 패키지 등록 센터(즉 npm)에서 해방시키는 데 필요한 절차를 취했다.
    Dahl은 여름이 끝나기 전에 1.0 버전을 발표하고 싶다고 하니 데노의 미래 발전에 관심이 있다면 스타its repository을 클릭하세요.

    플러그인: 네트워크 어플리케이션용 DVR용 LogRocket



    LogRocket은 프론트 로그 기록 도구로 질문을 다시 재생할 수 있습니다. 마치 브라우저에서 발생한 것처럼.LogRocket은 오류가 발생한 원인을 추측하거나 화면 캡처와 로그 저장을 물어보지 않고 세션을 다시 재생할 수 있도록 합니다.프레임워크가 어떻든지 간에 모든 응용 프로그램과 완벽하게 어울릴 수 있으며, 플러그인은 Redux, Vuex, @ngrx/store의 추가 상하문을 기록합니다.
    LogRocket은 Redux 작업과 상태를 기록하는 것 외에도 콘솔 로그, JavaScript 오류, 스택 추적, 헤더+본문이 있는 네트워크 요청/응답, 브라우저 메타데이터와 사용자 정의 로그를 기록합니다.또한 DOM은 페이지의 HTML과 CSS를 기록하여 가장 복잡한 단일 페이지 응용 프로그램이라도 픽셀 수준의 비디오를 재구성합니다.
    Try it for free .
    게시물 What’s Deno, and how is it different from Node.js?LogRocket Blog에 먼저 올라왔습니다.

    좋은 웹페이지 즐겨찾기