វេទិកា Deno JavaScript គឺត្រូវគ្នាជាមួយម៉ូឌុល 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”។ កូដពីធនធានខាងក្រៅត្រូវបានទាញយក និងទុកក្នុងឃ្លាំងសម្ងាត់នៅលើប្រព័ន្ធមូលដ្ឋាន ប៉ុន្តែមិនត្រូវបានអាប់ដេតដោយស្វ័យប្រវត្តិទេ (ការធ្វើបច្ចុប្បន្នភាពតម្រូវឱ្យដំណើរការកម្មវិធីយ៉ាងច្បាស់ជាមួយនឹងទង់ "--ផ្ទុកឡើងវិញ");
  • ដំណើរការប្រកបដោយប្រសិទ្ធភាពនៃសំណើបណ្តាញតាមរយៈ HTTP នៅក្នុងកម្មវិធី វេទិកាត្រូវបានរចនាឡើងសម្រាប់បង្កើតកម្មវិធីបណ្តាញដែលមានប្រសិទ្ធភាពខ្ពស់។
  • សមត្ថភាពក្នុងការបង្កើតកម្មវិធីគេហទំព័រជាសកលដែលអាចត្រូវបានប្រតិបត្តិទាំងនៅក្នុង Deno និងនៅក្នុងកម្មវិធីរុករកបណ្ដាញធម្មតា;
  • Наличие стандартного набора модулей, использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;
  • Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде «import * as log from «https://deno.land/std/log/mod.ts». Файлы, загруженные с внешних серверов по URL, кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, «https://unpkg.com/[អ៊ីមែលការពារ]/dist/liltest.js";
  • រចនាសម្ព័ន្ធរួមបញ្ចូលប្រព័ន្ធត្រួតពិនិត្យភាពអាស្រ័យរួមបញ្ចូលគ្នា (ពាក្យបញ្ជា "ព័ត៌មាន deno") និងឧបករណ៍ប្រើប្រាស់សម្រាប់ការធ្វើទ្រង់ទ្រាយកូដ (deno fmt);
  • ស្គ្រីបកម្មវិធីទាំងអស់អាចត្រូវបានបញ្ចូលគ្នាទៅក្នុងឯកសារ JavaScript មួយ។

ប្រភព: opennet.ru

បន្ថែមមតិយោបល់