Site icon saotuvi.com

Deno là gì? So sánh Deno 2, Bun và Nodejs

Nói về JavaScript Runtime, không thể không nhắc đến Node.js. Tuy nhiên, nó vẫn tồn tại một số hạn chế như bảo mật và quản lý thư viện. Để khắc phục điều này, Deno ra đời như một giải pháp hiện đại hơn, bảo mật và hỗ trợ TypeScript ngay từ đầu. Hãy cùng mình tìm hiểu lý do vì sao Deno lại được đánh giá cao như vậy.

1. Deno là gì?

Deno (/ˈdiːnoʊ/ – “dee-no”) là một runtime JavaScript, TypeScript và WebAssembly được tạo ra nhằm khắc phục những hạn chế trong Nodejs, đặc biệt về bảo mật, quản lý gói và tích hợp TypeScript. Deno được xây dựng trên các nền tảng V8 (JavaScript engine), Rust (ngôn ngữ lập trình an toàn và hiệu suất cao), và Tokio (runtime bất đồng bộ mạnh mẽ).

2. Những đặc điểm nổi bật của Deno

3. Những cải tiến đáng kể của Deno 2.x

3.1 Tương thích ngược với Nodejs và npm

3.2 Phát hành Long-Term Support (LTS)

3.3 Quản lý dependencies

3.4 Hỗ trợ monorepo, workspace và private registries

Ví dụ về file .npmrc cho private registry như này:

Bash

@mycompany:registry=http://mycompany.com:8111/
mycompany.com:8111/:_authToken=token

3.5 Hỗ trợ các framework phổ biến

3.6 Thay đổi CLI

Một số thay đổi quan trọng về CLI và API giữa Deno 1.x và Deno 2.x:

Typescript

import * as esbuild from "npm:esbuild";
import { denoPlugins } from "jsr:@luca/esbuild-deno-loader";

const result = await esbuild.build({
  plugins: [...denoPlugins()],
  entryPoints: ["https://deno.land/std@0.185.0/bytes/mod.ts"],
  outfile: "./dist/bytes.esm.js",
  bundle: true,
  format: "esm",
});

esbuild.stop();

Bash

deno install --entrypoint main.ts		

JSON

{
  "vendor": true
}

Bash

deno test --permit-no-files

Bash

deno run --ext=ts script.ts

Bash

deno test --trace-leaks

Bash

deno run --unstable-kv kv.ts

3.7 Thay đổi về API

Typescript

import { Buffer } from "jsr:@std/io/buffer";
const buffer = new Buffer();

Typescript

const file = await Deno.open("/foo/bar.txt");
file.close();

Typescript

const conn = await Deno.connect({ port: 80 });
await conn.read(buffer);

Từ những thay đổi được đưa ra ở trên, Deno 2 tập trung vào việc mang lại khả năng sử dụng ở quy mô lớn hơn, với các cải tiến về hiệu suất, tương thích với Nodejs và npm.

4. Ưu, nhược điểm của Deno

4.1 Ưu điểm của Deno

4.2 Nhược điểm của Deno

5. So sánh Deno, Bun và Nodejs

Đặc điểm Bun Deno Node.js
Ngôn ngữ hỗ trợ JavaScript, TypeScript JavaScript, TypeScript, WebAssembly JavaScript, TypeScript (qua công cụ bên ngoài)
Engine JavaScript JavaScriptCore V8 V8
Tích hợp TypeScript Có, không cần cấu hình Có, không cần cấu hình Không, cần cấu hình thêm
Bảo mật mặc định Không Có, phải yêu cầu quyền rõ ràng Không
Hỗ trợ npm
Tốc độ Rất nhanh (đặc biệt ở I/O) Nhanh Tốt
WebAssembly
Hỗ trợ API Web Không (dùng thư viện bên ngoài)
Module bundling Tích hợp sẵn Có, nhưng không phải mặc định Không (cần thêm bundler như Webpack)
Cộng đồng Đang phát triển Đang phát triển Rất lớn

6. Hướng dẫn cài đặt Deno

Bạn có thể chạy lệnh sau để cài đặt:

Bash

// MacOS & Linux

curl -fsSL https://deno.land/install.sh | sh

// Windows

irm https://deno.land/install.ps1 | iex

Sau khi cài đặt xong, kiểm tra bằng cách chạy:

Bash

deno --version

7. Bắt đầu dự án mới với Deno

Sau khi đã cài đặt Deno, bạn có thể tạo và khởi chạy dự án Deno của riêng mình.

Deno hỗ trợ cả TypeScript và JavaScript. Bạn có thể chọn ngôn ngữ mà mình muốn, nhưng TypeScript thường được khuyến khích do được tích hợp sẵn.

Tạo file index.ts:

Typescript

console.log("200Lab Chào, Deno!");

Để chạy file index.ts, bạn chỉ cần chạy lệnh sau trong terminal:

Bash

deno run index.ts

Deno có một mô hình bảo mật mạnh mẽ. Ở mặc định, Deno sẽ không cho phép truy cập vào các tài nguyên hệ thống như file, mạng, hoặc môi trường mà không có sự cấp quyền rõ ràng từ bạn. Để cấp quyền, bạn phải sử dụng các cờ –allow-*.

Ví dụ, nếu như dự án của bạn cần truy cập mạng, bạn sẽ phải cấp quyền bằng cờ –allow-net:

Bash

deno run --allow-net index.ts

Ví dụ sử dụng thư viện chuẩn của Deno để tạo một server web đơn giản trong file server.ts

Typescript

import { serve } from "https://deno.land/std/http/server.ts";

const handler = (request: Request): Response => {
  return new Response("200Lab Chào, Deno HTTP Server!", { status: 200 });
};

console.log("Server running on http://localhost:8000");
await serve(handler, { port: 8000 });

Để chạy bạn thực hiện lệnh:

Bash

deno run --allow-net server.ts

Server sẽ chạy trên port 8000, và bạn có thể truy cập địa chỉ http://localhost:8000 từ browser

Bên cạnh đó, bạn cũng có thể quản lý các tác vụ phát triển (dev tasks) dễ dàng bằng cách sử dụng tệp deno.json. Đây là cách để định nghĩa và chạy các task một cách hiệu quả.

JSON

{
  "tasks": {
    "start": "deno run --allow-net server.ts",
    "format": "deno fmt",
    "lint": "deno lint"
  }
}

Khi định nghĩa file deno.json như trên, bạn có thể chạy server bằng lệnh:

Bash

deno task start

Format code với lệnh

Bash

deno task format

Để kiểm tra lỗi với lệnh

Bash

deno task lint

8. Kết luận

Deno là một runtime mạnh mẽ, an toàn, và dễ sử dụng cho các developer JavaScript và TypeScript. Với khả năng hỗ trợ TypeScript mặc định, mô hình bảo mật tiên tiến và các công cụ tích hợp sẵn như linting, formatting, Deno là lựa chọn tuyệt vời cho bạn nếu muốn xây dựng ứng dụng mà không cần quá nhiều cấu hình phức tạp.

Hy vọng với những kiến thức, hướng dẫn trên, bạn có thể dễ dàng khởi tạo và quản lý một dự án với Deno từ việc cài đặt, chạy server, đến quản lý dependencies.

Các bài viết liên quan:

Exit mobile version