Giới thiệu Deno Là Gì: JavaScript & TypeScript Runtime Bảo Mật Cao


Tháng 5 năm 2020, Deno 1.0 được ra mắt và dần trở chủ đề "nóng hổi". Hãy cùng tìm hiểu tại sao công cụ này lại nổi tiếng như vậy nhé!

Trong bài viết này, tôi hy vọng sẽ cung cấp cho bạn một cái nhìn tổng quan về Deno là gì. Chúng tôi sẽ xem xét các tính năng chính của nó và trả lời câu hỏi tại sao bạn có thể muốn bắt đầu tìm hiểu công cụ mới này.

Deno là gì?

Vậy Deno là gì, và tại sao nó được tạo ra? Deno là JavaScript và TypeScript runtime, nghĩa là bạn có thể viết chương trình bằng một trong hai ngôn ngữ và thực thi chúng từ dòng lệnh. Không giống như JavaScript chạy trong trình duyệt, các chương trình Deno có thể truy cập tài nguyên trên máy tính chủ, chẳng hạn như filesystem và biến môi trường.

Nếu bạn biết đến Node.js và nghĩ rằng Deno nghe khá giống, bạn đã đúng rồi đó. Deno là sản phẩm trí tuệ của người sáng tạo ra Node, Ryan Dahl, sau đó tiếp tục tạo ra Deno để giải quyết những gì anh ta coi là sai sót thiết kế trong Node. Mục đích của dự án là cung cấp một môi trường tập lệnh được mặc định bảo mật bao, coi TypeScript là ngôn ngữ chính và tương thích với trình duyệt nhất có thể.

Tính năng bảo mật

Deno được thiết kế với tính bảo mật mặc định rất cao. Tất cả mã được thực thi mặc định trong secure sandbox, có nghĩa là bạn cần cấp quyền rõ ràng để cho phép chương trình truy cập vào mạng hoặc filesystem.

Các chương trình có thể được cấp quyền với các flag dòng lệnh sau:

  • -A, –allow-all: cho phép mọi lệnh (vô hiệu hóa tất cả bảo mật).
  • –allow-env: cho phép nhận và thiết lập biến môi trường.
  • –allow-hrtime: cho phép đo lường thời gian có độ chi tiết cao (có thể được dùng cho timing attacks và fingerprinting)
  • –allow-net=\: Cho phép truy cập mạng. Có thể tùy chọn lệnh riêng để chỉ định các tên miền cụ thể.
  • –allow-plugin: Cho phép tải plugin (chưa ổn định).
  • –allow-read=\: Cho phép đọc file hệ thống. Tùy chọn chỉ định thư mục hoặc tệp cụ thể.
  • –allow-run: Cho phép chạy process con.
  • –allow-write=\: Cho phép chép file hệ thống. Tùy chọn lấy whitelist thư mục hoặc tệp được phân tách bằng dấu phẩy.

Hỗ trợ chính TypeScript

Như tôi đã đề cập trước đó, Deno có thể thực thi cả JavaScript và TypeScript. Hơn nữa, công cụ hỗ trợ TypeScript như một ngôn ngữ first-class. Điều này có nghĩa là nó có thể tải và chạy mã TypeScript của bạn mà không cần bất kỳ bước xây dựng bổ sung nào. Và cũng không cần thiết lập thêm công cụ để chuyển mã của bạn sang JavaScript.

Tất nhiên, vì TypeScript là một superset JavaScript hiện đại, bạn cũng có thể viết mã của mình bằng JS thông thường nếu bạn muốn! Vì Deno hỗ trợ một số tính năng tuyệt vời, thân thiện với nhà phát triển như ES Module imports.

Sử dụng external code

Như Ryan đã đề cập trong buổi chia sẻ của mình, một trong những mục tiêu của anh ấy đối với Deno là tránh sự cần thiết của package manager. Không giống như các runtime/ngôn ngữ như Node.js và PHP (sử dụng npm và composer package managers), Deno không có pakage manager.

Thay vào đó, external packages được nhập trực tiếp bằng URL:

import { Client } from "https://deno.land/x/mysql@2.2.0/mod.ts";

Lần đầu tiên bạn chạy tập lệnh của mình, Deno sẽ tìm nạp, biên dịch và lưu vào bộ nhớ cache tất cả các lần nhập, để các lần khởi động tiếp theo diễn ra nhanh như chớp. Tất nhiên là đôi khi bạn có thể muốn buộc hệ thống re-fetch lại import và bạn có thể thực hiện việc này với lệnh con cache:

deno cache --reload my_module.ts

Package hosting

Tuy Deno không cung cấp package registry, nhưng có sẵn một loạt third-party modules. Dịch vụ cung cấp một URL được chuẩn hóa, phiên bản hóa để liên kết tới GitHub repo của module. Bạn có thể tìm kiếm các pakage theo tên và xem trước mô tả ngắn gọn, và nhấp vào để đọc readme.

Thư Viện Chuẩn

Deno cung cấp thư viện chuẩn với một loạt các module chất lượng cao không cần đến thành phần phụ thuộc (dependency) bên ngoài.

Các gói trong thư viện chuẩn không được cài đặt cùng với Deno. Thay vào đó, chúng có sẵn trực tuyến và được liên kết như chúng ta đã thấy trong phần trước. Các module được phiên bản hóa, cho phép bạn gán mã của mình cho mỗi phiên bản cụ thể:

import { copy } from "https://deno.land/std@0.50.0/fs/copy.ts";

Điều này có nghĩa là bất kỳ mã nào bạn viết dựa trên mô-đun từ thư viện chuẩn sẽ tiếp tục hoạt động trong các phiên bản sau.

Thư viện bao gồm các trình trợ giúp và tiện ích khác nhau giúp bạn xây dựng cả ứng dụng lệnh, và ứng dụng HTTP dễ dàng hơn:

  • archive: module giúp làm việc với file tar
  • async: các tiện ích async
  • bytes: helper cho mảng nhị phân
  • datetime: helper dịch strings ngày tháng thành object Date
  • encoding: encoders cho các định dạng base32, binary, CSV, TOML, và YAML
  • flags: trình phân tích cú pháp đối số dòng lệnh
  • fmt: công cụ xuất kết quả có định dạng
  • fs: helpers làm việc với filesystem
  • hash: module tạo hash bằng một loạt thuật toán
  • http: tạo máy chủ file và HTTP, chi phối cookies
  • io: tiện ích cho string input/output
  • log: logging module đơn giản
  • mime: cung cấp hỗ trợ multipart data
  • node: compatibility layer (đang được xây dựng) compatibility layer cho Node.js code
  • path: tiện ích kiểm soát path
  • permissions: helpers giúp kiểm tra và hiện thông báo liên quan đến security permissions
  • signal: helpers xử lý tín hiện Deno process
  • testing: test assertions dùng với test runner có sẵn của Deno
  • uuid: tiện ích tạo và xác minh UUIDs
  • ws: helpers giúp tạo client và server WebSocket

Cài Đặt Deno

Deno là một single executable không có dependencies. Bạn có thể tải binary từ releases page, hoặc cài đặt thông qua installers như sau:

Shell (macOS, Linux):

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

PowerShell (Windows):

iwr https://deno.land/x/install/install.ps1 -useb | iex

Homebrew (macOS):

brew install deno

Cập nhật

Sau khi cài đặt, Deno có thể tự cập nhật đến phiên bản mới nhất với lệnh sau:

deno upgrade

Hoặc, bạn có thể up/downgrade xuống một phiên bản nhất định:

deno upgrade --version 1.0.1

Deno trong tương lai

Hướng dẫn sử dụng Deno gợi mở đây “sẽ là công cụ thay thế hiệu quả mà trước đấy thường được viết bằng Bash hoặc Python”. Đồng thời, người viết hy cọng công cụ sẽ được sử dụng nhiều hơn nữa để thay thế cho các tác vụ hiện đang thường được xử lý với Node.js khi mà hiện nay đã có kha khá framework Express/Koa-like cho phép chúng ta build type-safe REST APIs, và rất nhiều third-party modules mới nữa.

Theo Sitepoint

Nhận xét

Bài đăng phổ biến