Nền tảng Deno JavaScript tương thích với các mô-đun NPM

Deno 1.28 đã được phát hành, một framework cho phép sandbox các ứng dụng JavaScript và TypeScript có thể được sử dụng để tạo các trình xử lý phía máy chủ. Nền tảng này được phát triển bởi Ryan Dahl, người tạo ra Node.js. Giống như Node.js, Deno sử dụng công cụ JavaScript V8, công cụ này cũng được sử dụng trong các trình duyệt dựa trên Chrome. Đồng thời, Deno không phải là một nhánh của Node.js mà là một dự án mới được tạo từ đầu. Mã dự án được phân phối theo giấy phép MIT. Các bản dựng được chuẩn bị cho Linux, Windows và macOS.

Dự án Deno được tạo ra để cung cấp cho người dùng một môi trường an toàn hơn và loại bỏ các lỗi khái niệm trong kiến ​​trúc Node.js. Để cải thiện tính bảo mật, động cơ V8 được viết bằng Rust, giúp tránh được nhiều lỗ hổng phát sinh từ việc thao tác bộ nhớ cấp thấp. Để xử lý các yêu cầu ở chế độ không chặn, nền tảng Tokio, cũng được viết bằng Rust, được sử dụng. Tokio cho phép bạn tạo các ứng dụng hiệu suất cao dựa trên kiến ​​trúc hướng sự kiện, hỗ trợ đa luồng và xử lý các yêu cầu mạng ở chế độ không đồng bộ.

Thay đổi quan trọng trong bản phát hành mới là tính ổn định của khả năng tương thích với các gói được lưu trữ trong kho NPM, cho phép Deno sử dụng hơn 1.3 triệu mô-đun được tạo cho nền tảng Node.js. Ví dụ: các ứng dụng dựa trên Deno hiện có thể sử dụng các mô-đun truy cập dữ liệu liên tục như Prisma, Mongoose và MySQL, cũng như các khung giao diện người dùng như React và Vue. Một số mô-đun NPM vẫn không tương thích với Deno, chẳng hạn như do liên kết với các thành phần môi trường dành riêng cho Node.js chẳng hạn như tệp pack.json. Cũng chưa thể sử dụng lệnh "deno biên dịch" với các mô-đun NPM. Các bản phát hành trong tương lai có kế hoạch giải quyết những điểm không tương thích và hạn chế này.

Hỗ trợ cho hệ thống mô-đun ECMAScript đã sử dụng trước đây của Deno và mô hình API Web vẫn được giữ nguyên ở cùng cấp độ và sơ đồ tải dựa trên URL quen thuộc của Deno được sử dụng để nhập các mô-đun NPM. Để truy cập các mô-đun NPM, có một tiền tố URL đặc biệt “npm:”, có thể được sử dụng giống như các mô-đun Deno thông thường. Ví dụ: để nhập mô-đun NPM, bạn có thể chỉ định 'import { chalk } from "npm:chalk@5";' và để chạy tập lệnh NPM từ dòng lệnh - "deno run --allow-env --allow -read npm:create- vite-extra.”

Sử dụng các gói NPM trong Deno dễ dàng hơn nhiều so với trong Node.js, vì không cần cài đặt trước các mô-đun (các mô-đun được cài đặt khi ứng dụng được khởi chạy lần đầu), không có tệp pack.json và không có node_modules mặc định thư mục (các mô-đun được lưu trữ trong thư mục dùng chung, nhưng có thể trả về hành vi cũ bằng cách sử dụng tùy chọn “--node-modules-dir”).

Các ứng dụng dựa trên NPM vẫn có khả năng sử dụng các khả năng kiểm soát truy cập, cách ly và nâng cao nhạy cảm với bảo mật của Deno. Để chống lại các cuộc tấn công thông qua các phần phụ thuộc đáng ngờ, Deno theo mặc định chặn tất cả các nỗ lực giành quyền truy cập vào hệ thống từ các phần phụ thuộc và hiển thị cảnh báo về các vấn đề được phát hiện. Ví dụ: khi một mô-đun cố gắng giành quyền truy cập ghi vào /usr/bin/, yêu cầu xác nhận cho thao tác này sẽ được hiển thị: deno run npm:install-malware ⚠️ ┌ Deno yêu cầu quyền truy cập ghi vào /usr/bin/. ├ Được yêu cầu bởi `install-malware` ├ Chạy lại với --allow-write để bỏ qua lời nhắc này. └ Cho phép? [y/n] (y = có, cho phép; n = không, từ chối) >

Các cải tiến không phải NPM trong phiên bản mới bao gồm cập nhật công cụ V8 lên phiên bản 10.9, tự động phát hiện các tệp có khóa, ổn định Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() và API Deno. .uid(), thêm API Deno.Command() không ổn định mới để chạy các lệnh (thay thế chung cho Deno.spawn, Deno.spawnSync và Deno.spawnChild).

Các tính năng chính của Deno:

  • Cấu hình mặc định hướng đến bảo mật. Quyền truy cập tệp, kết nối mạng và quyền truy cập vào các biến môi trường bị tắt theo mặc định và phải được bật rõ ràng. Các ứng dụng theo mặc định chạy trong môi trường hộp cát biệt lập và không thể truy cập các khả năng của hệ thống nếu không cấp quyền rõ ràng;
  • Hỗ trợ tích hợp cho TypeScript ngoài JavaScript. Để kiểm tra kiểu và tạo JavaScript, trình biên dịch TypeScript tiêu chuẩn được sử dụng, điều này dẫn đến giảm hiệu suất so với phân tích cú pháp JavaScript trong V8;
  • Thời gian chạy có dạng một tệp thực thi độc lập (“deno”). Để chạy các ứng dụng bằng Deno, bạn chỉ cần tải xuống một tệp thực thi cho nền tảng của mình, có kích thước khoảng 30 MB, không có phụ thuộc bên ngoài và không yêu cầu bất kỳ cài đặt đặc biệt nào trên hệ thống. Hơn nữa, deno không phải là một ứng dụng nguyên khối mà là một tập hợp các gói thùng Rust (deno_core, Rusty_v8), có thể được sử dụng riêng biệt;
  • Khi khởi động chương trình cũng như để tải các mô-đun, bạn có thể sử dụng địa chỉ URL. Ví dụ: để chạy chương trình Welcome.js, bạn có thể sử dụng lệnh “deno https://deno.land/std/examples/welcome.js”. Mã từ các tài nguyên bên ngoài được tải xuống và lưu vào bộ nhớ đệm trên hệ thống cục bộ, nhưng không bao giờ được cập nhật tự động (việc cập nhật yêu cầu chạy ứng dụng một cách rõ ràng với cờ “--reload”);
  • Xử lý hiệu quả các yêu cầu mạng thông qua HTTP trong các ứng dụng; nền tảng được thiết kế để tạo các ứng dụng mạng hiệu suất cao;
  • Khả năng tạo các ứng dụng web phổ quát có thể được thực thi cả trong Deno và trình duyệt web thông thường;
  • Sự hiện diện của một bộ mô-đun tiêu chuẩn, việc sử dụng chúng không yêu cầu ràng buộc với các phụ thuộc bên ngoài. Các mô-đun từ bộ sưu tập tiêu chuẩn đã trải qua quá trình kiểm tra bổ sung và kiểm tra khả năng tương thích;
  • Ngoài thời gian chạy, nền tảng Deno còn hoạt động như một trình quản lý gói và cho phép bạn truy cập các mô-đun bằng URL bên trong mã. Ví dụ: để tải một mô-đun, bạn có thể chỉ định trong mã “nhập * dưới dạng nhật ký từ”https://deno.land/std/log/mod.ts”. Các tệp được tải xuống từ máy chủ bên ngoài qua URL sẽ được lưu vào bộ nhớ đệm. Việc liên kết với các phiên bản mô-đun được xác định bằng cách chỉ định số phiên bản bên trong URL, ví dụ: “https://unpkg.com/[email được bảo vệ]/dist/liltest.js";
  • Cấu trúc bao gồm một hệ thống kiểm tra phụ thuộc tích hợp (lệnh “deno info”) và tiện ích định dạng mã (deno fmt);
  • Tất cả các tập lệnh ứng dụng có thể được kết hợp thành một tệp JavaScript.

Nguồn: opennet.ru

Thêm một lời nhận xét