די 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:

  • זיכערהייַט-אָריענטיד פעליקייַט קאַנפיגיעריישאַן. טעקע אַקסעס, נעטוואָרקינג און אַקסעס צו סוויווע וועריאַבאַלז זענען פאַרקריפּלט דורך פעליקייַט און מוזן זיין בפירוש ענייבאַלד. אַפּפּליקאַטיאָנס דורך פעליקייַט לויפן אין אפגעזונדערט זאַמדקאַסטן ינווייראַנמאַנץ און קענען נישט אַקסעס סיסטעם קייפּאַבילאַטיז אָן געבן יקספּליסאַט פּערמישאַנז;
  • Встроенная поддержка языка 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". קאָד פון פונדרויסנדיק רעסורסן איז דאַונלאָודיד און קאַשט אויף די היגע סיסטעם, אָבער איז קיינמאָל אויטאָמאַטיש דערהייַנטיקט (דערהייַנטיקן ריקווייערז בפירוש פליסנדיק די אַפּלאַקיישאַן מיט די "--רילאָוד" פאָן);
  • עפעקטיוו פּראַסעסינג פון נעץ ריקוועס דורך הטטפּ אין אַפּלאַקיישאַנז; די פּלאַטפאָרמע איז דיזיינד פֿאַר קריייטינג הויך-פאָרשטעלונג נעץ אַפּלאַקיישאַנז;
  • די פיייקייט צו שאַפֿן וניווערסאַל וועב אַפּלאַקיישאַנז וואָס קענען זיין עקסאַקיוטאַד ביידע אין Deno און אין אַ רעגולער וועב בלעטערער;
  • Наличие стандартного набора модулей, использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;
  • Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде «import * as log from «https://deno.land/std/log/mod.ts». Файлы, загруженные с внешних серверов по URL, кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, «https://unpkg.com/[אימעיל באשיצט]/dist/liltest.js";
  • די סטרוקטור כולל אַן ינאַגרייטיד דעפּענדענסי דורכקוק סיסטעם (די "דענאָ אינפֿאָרמאַציע" באַפֿעל) און אַ נוצן פֿאַר קאָד פאָרמאַטטינג (Deno fmt);
  • כל אַפּלאַקיישאַן סקריפּס קענען זיין קאַמביינד אין איין דזשאַוואַסקריפּט טעקע.

מקור: opennet.ru

לייגן אַ באַמערקונג