У JavaScript-платформі Deno забезпечено сумісність із модулями NPM

Представлено випуск Deno 1.28, платформи для відокремленого виконання програм на мовах JavaScript та TypeScript, яка може бути використана для створення обробників, які працюють на сервері. Платформу розвиває Райан Даль (Ryan Dahl), автор Node.js. Як і в Node.js, у Deno використовується JavaScript-движок V8, який також застосовується в браузерах на основі Chromium. При цьому Deno не є відгалуженням від Node.js, а є створений з нуля новий проект. Код проекту розповсюджується під ліцензією MIT. Складання підготовлено для Linux, Windows і macOS.

Проект Deno був створений для надання користувачам більш захищеного оточення та усунення концептуальних помилок, допущених в архітектурі Node.js. Для підвищення безпеки обв'язка навколо двигуна V8 написана мовою Rust, що дозволяє уникнути багатьох уразливостей, що виникають через низькорівневу роботу з пам'яттю. Для обробки запитів у неблокувальному режимі застосовується платформа Tokio, також написана мовою Rust. Tokio дозволяє створювати високопродуктивні програми на основі подієво-орієнтованої архітектури (Event-driven), що підтримують багатопоточність та обробку мережевих запитів в асинхронному режимі.

Ключовою зміною нового випуску є стабілізація сумісності з пакетами, розміщеними в репозиторії NPM, що дозволяє використовувати в Deno більше 1.3 млн модулів, створених для платформи Node.js. Наприклад, у програмах на базі Deno тепер можна використовувати такі модулі для організації постійного доступу до даних, як Prisma, Mongoose та MySQL, а також фреймворки для забезпечення роботи фронтендів, таких як React та Vue. Деякі NPM-модулі поки що залишаються несумісними з Deno, наприклад, через прив'язки до специфічних для Node.js елементів оточення, таких як файл package.json. Також поки що неможливо використовувати команду «deno compile» з модулями NPM. У майбутніх випусках планується усунути подібні несумісності та обмеження.

Підтримка раніше застосовуваної в Deno моделі на основі системи модулів ECMAScript та Web API збережена на тому ж рівні і для імпорту модулів NPM використовується звична для Deno схема завантаження на основі URL. Для звернення до модулів NPM передбачено спеціальний URL-префікс npm:, який може використовуватися за аналогією зі звичайними модулями Deno. Наприклад, для імпорту NPM-модуля можна вказати 'import {chalk} from "npm:chalk@5";', а для запуску NPM-скрипту з командного рядка - "deno run -allow-env -allow-read npm:create- vite-extra».

Використання NPM-пакетів у Deno значно простіше, ніж у Node.js, оскільки немає необхідності попередньої установки модулів (модулі встановлюються при першому запуску програми), не використовується файл package.json, а також не використовується за замовчуванням каталог node_modules (модулі кешуються в загальному каталозі, але є можливість повернення старої поведінки за допомогою опції "- node-modules-dir").

У додатках на базі NPM зберігається можливість використання наданих у Deno механізмів розмежування доступу, ізоляції та активації, що впливають на безпеку розширених можливостей. Для протидії проведенню атак через сумнівні залежності Deno блокує за замовчуванням усі спроби отримання доступу до системи залежностей і виводить попередження про виявлені проблеми. Наприклад, при спробі модуля отримання доступу до запису /usr/bin/ буде виведено запит підтвердження цієї операції: deno run npm:install-malware ⚠️ ┌ Deno requests write access to /usr/bin/. ├ Requested by `install-malware` ├ Run again with -allow-write to bypass this prompt. └ Allow? [y/n] (y = yes, allow; n = no, deny) >

З не пов'язаних у NPM поліпшень у новій версії згадується оновлення двигуна V8 до випуску 10.9, автоматичне визначення файлів з блокуваннями, стабілізація API Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() та Deno .uid(), додавання нового нестабільного API Deno.Command() для запуску команд (універсальна заміна Deno.spawn, Deno.spawnSync та Deno.spawnChild).

Основні особливості Deno:

  • Орієнтація на безпеку конфігурації за замовчуванням. Звертання до файлів, мережеві можливості та доступ до змінних оточення за замовчуванням блоковані та потребують явного включення. Програми за замовчуванням запускаються в ізольованих sandbox-оточеннях і не можуть отримати доступ до системних можливостей без надання явних повноважень;
  • Вбудована підтримка мови TypeScript, крім JavaScript. Для перевірки типів та генерації JavaScript задіяно штатний компілятор TypeScript, що призводить до просідання продуктивності в порівнянні з розбором JavaScript в V8;
  • Runtime поставляється у формі одного самодостатнього виконуваного файлу (deno). Для запуску додатків за допомогою Deno достатньо завантажити для своєї платформи один файл, розміром близько 30 МБ, не має зовнішніх залежностей і не вимагає якоїсь особливої ​​установки в систему. При цьому deno не є монолітним додатком, а є колекцією crate-пакетів на Rust (deno_core, rusty_v8), які можуть використовуватися окремо;
  • При запуску програми, а також для завантаження модулів, можна використовувати адресацію через URL. Наприклад, для запуску програми welcome.js можна використовувати команду "deno https://deno.land/std/examples/welcome.js". Код із зовнішніх ресурсів завантажується та кешується на локальній системі, але ніколи автоматично не оновлюється (для оновлення потрібно явно запустити програму з прапором «-reload»);
  • Ефективна обробка у додатках мережних запитів по HTTP, платформа розрахована створення високопродуктивних мережевих додатків;
  • Можливість створення універсальних web-додатків, які можуть виконатися як у Deno, так і у звичайному веб-браузері;
  • Наявність стандартного набору модулів, використання яких вимагає прив'язки до зовнішнім залежностям. Модулі зі стандартної колекції пройшли додатковий аудит та перевірку на сумісність;
  • Крім runtime платформа Deno також виконує роль пакетного менеджера і дозволяє всередині коду звертатися до модулів URL. Наприклад, для завантаження модуля можна вказати в коді "import * as log from "https://deno.land/std/log/mod.ts". Файли, завантажені із зовнішніх серверів за URL-адресою, кешуються. Прив'язка до версій модулів визначається через вказівки номерів версій всередині URL, наприклад, https://unpkg.com/[захищено електронною поштою]/dist/liltest.js»;
  • До складу інтегрована система інспектування залежностей (команда "deno info") та утиліта для форматування коду (deno fmt);
  • Всі скрипти програми можуть бути об'єднані в один файл JavaScript.

Джерело: opennet.ru

Додати коментар або відгук