Поиск по сайту:

Что нового в Deno 1.19?


Deno 1.19 был выпущен в феврале 2022 года как последнее добавочное обновление для безопасной среды выполнения JavaScript. Среди изменений — упрощенный процесс управления разрешениями, первоклассная поддержка зависимостей от поставщиков и новые собственные веб-потоки для файлов, сетевых сокетов и стандартного ввода и вывода.

В этой статье мы рассмотрим основные дополнения и улучшения, которые изменят то, как вы используете Deno. Вы можете получить полную информацию о выпуске из журнала изменений в блоге Deno.

Запросы разрешения

Одна из основных целей Deno — предложить более безопасную среду JavaScript, чем альтернативы, такие как Node.js. Его строгая модель разрешений не позволяет программам получать доступ к таким возможностям, как сеть, файловая система и среда хоста, если пользователь явно не предоставит доступ.

В предыдущих версиях Deno вам нужно было указать флаги командной строки, такие как --allow-net (разрешить работу в сети) и --allow-read (разрешить чтение файловой системы), чтобы предоставить эти разрешения. В качестве альтернативы был предложен флаг --prompt, перечисляющий каждое разрешение как интерактивное приглашение CLI, на которое вы должны ответить y или n.

В Deno v1.19 флаг --prompt автоматически включается, когда вы опускаете определенные параметры --allow-. Это ускоряет запуск приложений, которым требуется несколько разрешений. Вам не нужно запоминать их по отдельности или каждый раз указывать --prompt.

Вы можете использовать флаг --no-prompt, чтобы полностью отключить интерактивные запросы разрешений. Это остается режимом по умолчанию, когда Deno работает без телетайпа.

Собственные веб-потоки

Deno теперь использует собственные экземпляры ReadableStream и WritableStream для своих файловых, сетевых и стандартных потоков. Принятие веб-потоков для этих функций улучшает взаимодействие между API и другими средами выполнения, такими как веб-браузеры. Например, теперь вы можете передавать сетевые данные прямо в файл или стандартный вывод:

const file = await Deno.create("./data.txt");
const networkResponse = await fetch("https://example.com/data.txt");
await networkResponse.body.pipeTo(file.writable);

Свойства readable и writable каждого потока относятся к экземплярам веб-потока. Их можно свободно передавать между поддерживающими API, что делает сложный асинхронный код понятным и читабельным. Использование веб-потоков распространяется на серверный компонент Deno, что позволяет передавать потоковые данные в ваши HTTP-ответы.

Простое сжатие потока

Потоки также получили два новых преобразователя: CompressionStream и DecompressionStream. Они упрощают сжатие и распаковку данных, проходящих через потоки. Deno внедрил стандартизированные API, которые уже работают в Chrome и Opera. Ожидается, что другие браузеры добавят поддержку в будущем.

const decompressed = await Deno.open("./file.txt");
const compressed = await Deno.open("./file.txt.gz");
await decompressed.readable
	.pipeThrough(new CompressionStream("gz"))
	.pipeTo(compressed.writable);

Преобразователи в настоящее время поддерживают данные в формате gzip и deflate. Существует открытое предложение сообщества по расширению API с помощью сжатия brotli.

Зависимости от поставщиков

Большой новой функцией релиза являются зависимости от поставщиков. Deno теперь предоставляет механизм для поставщиков зависимостей как часть вашего собственного исходного кода. Он устраняет беспорядочный обходной путь фиксации DENO_DIR в вашем репозитории только для того, чтобы вы могли вносить изменения в файлы, предоставленные внешними модулями.

Зависимости поставщиков дают Deno что-то похожее на каталог Node.js node_modules. Поставщик модуля преобразует непрозрачные файлы в DENO_DIR в дерево зависимостей на диске, где имена файлов напоминают имена исходных модулей.

Новая команда deno vendor загружает удаленные зависимости указанных модулей в локальный каталог vendor:

deno vendor main.ts

Каталог будет включать import_map.json, который вы можете передать флагу Deno --import-map при выполнении исходного кода. Это даст указание Deno разрешать зависимости с помощью загруженных модулей. Добавление флага --no-remote полностью отключает загрузку удаленного модуля, гарантируя, что зависимости от поставщика будут использоваться без исключения.

deno run --no-remote --import-map=vendor/import_map.json main.ts

Хороший вариант использования этой функции — когда вы хотите распространять исходный код вместе с собственным исходным кодом. Это также удобно для отладки, когда вам нужно внедрить некоторые операторы ведения журнала в зависимость. Вы можете предоставить целевой модуль для удобного просмотра и редактирования его исходных файлов. Когда вы закончите, удалите каталог vendor, чтобы вернуться к обычной системе загрузки модулей.

Улучшенный опыт разработки

Другие новые улучшения расширяют возможности разработчиков и инструменты отладки Deno. Вот некоторые из изменений, которыми вы можете воспользоваться:

  • Более надежная компиляция. Команда deno compile сериализует граф зависимостей непосредственно в окончательный двоичный файл. Это удаляет шаг связывания, используемый в более старых версиях Deno, гарантируя, что порядок выполнения кода останется правильным. Скомпилированные двоичные файлы должны вести себя более предсказуемо и соответствовать deno run.
  • Циклические ссылки в console.log. Объекты, содержащие циклические ссылки, теперь четко отображаются в выходных данных console.log. Каждая ссылка включает индикатор целевого объекта и количество кругов текущей итерации.
  • Легко сохранять отчеты о покрытии. Отчет denocover получил флаг --output, который можно использовать для отправки вывода прямо в файл (покрытие deno --lcov --output=coverage.lcov покрытие/). Раньше вам нужно было использовать перенаправление оболочки, чтобы вручную передать стандартный вывод команды в файлы.
  • Отключить очистку консоли средства наблюдения за файлами. Флаг Deno --watch используется для очистки консоли при каждом перезапуске запущенного процесса. Теперь это поведение можно отключить с помощью флага --no-clear-screen. Это позволяет сохранить вывод консоли после изменения файлов.
  • Уменьшена неоднозначность в Deno.File APIDeno.File теперь называется Deno.FsFile, чтобы избежать путаница со стандартизированным веб-API File. Вы должны обновить ссылки Deno.File на новый вариант, чтобы было ясно, что вы обращаетесь к ресурсам локальной файловой системы. Deno.File остается пригодным для использования с предупреждениями об устаревании до Deno v2.

Существуют также новые нестабильные API для получения системного идентификатора пользователя запущенного процесса и обнаружения доступных сетевых интерфейсов. Существующий нестабильный API сокетов Unix теперь можно использовать для обслуживания HTTP-контента. Наконец, API прослушивателей сигналов для подписки на системные сигналы, такие как SIGINT и SIGTERM, был переведен в стабильный статус.

Обновление

Вы можете выполнить обновление до новой версии, выполнив команду deno upgrade. Это автоматически загрузит последнюю версию, разархивирует ее и перезапишет вашу текущую установку Deno. Вы можете вернуться к версии 1.18, если вам нужно использовать deno upgrade --version 1.18.2.

Краткое содержание

Deno v1.19 — еще один полезный релиз для среды выполнения JavaScript и TypeScript. Он упрощает несколько аспектов процесса разработки, начиная от обработки потоков и заканчивая утилитами командной строки deno.

Релиз также увеличивает время выполнения V8 до 9,9. Это добавляет новые функции интернализации, включая дополнительные свойства объекта Intl.Locale и функцию Intel.supportedValuesOf() для проверки доступности определенных компонентов. Теперь вы можете использовать эти возможности в своих программах Deno.




Все права защищены. © Linux-Console.net • 2019-2024