Deno 1.27

Deno 1.27
Изображение из блога Deno
👋
Хочешь поучаствовать в жизни сайта? Мы ищем авторов!

Улучшенная интеграция с IDE, совместимость с npm, стабильный deno task, обновленные API Deno и стандартной библиотеки, обновленная версия V8 и другое.

Сообщение о релизе и инструкции по обновлению опубликовали в блоге Deno: Deno 1.27: Major IDE Improvements.

Итак, что же нового?

Оглавление

Inlay Hints

Deno теперь передает в Language Server "Inlay Hints" - подсказки, которые встраляются в строку кода, например, для обозначения названия аргумента функции или типа переменной:

Автокомлит при вводе имени пакета

Это обновление не привязано конкретно к версии 1.27, но разработчики связывают его с этим релизом.

Теперь при импорте файлов из deno.land/x Language Server будет подсказывать доступные варианты, а также показывать документацию файла:

Поддержка типов в npm-пакетах

Теперь Deno сообщает IDE о типах в пакетах, установленных через npm, если типы указаны в пакете.

Для пакетов, использующих @types, нужно указывать специальную директиву перед импортом:

// @deno-types="npm:@types/chalk@4"
import chalk from "npm:chalk@4";

Если пакет еще и требует @types/node, нужно указывать еще одну директиву, чтобы подтянуть типы node:

/// <reference types="npm:@types/node" />

// @deno-types="npm:@types/express@4"
import express from "npm:express@4.18";

Поддержка Node-API

Node-API позволяет использовать нативный код из Node.js. Его поддержка открывает разработчикам на Deno доступ к библиотекам parcel, sqlite3, usb и fs-xattr. Поддержка включается флагом --allow-ffi.

Lockfile v2

Версии и чексуммы пакетов npm теперь записываются в локфайл. Локфайл будет использоваться по-умолчанию в версии 1.28.

Поддержка тегов дистрибутива (dist tags) npm

У некоторых пакетов npm есть теги дистрибутива, которые ссылаются на определенные версии. Например у пакета express на момент выхода поста есть тег next, резолвящийся в версию 5.0.0-beta.1.

Deno теперь умеет импортировать пакеты по тегу дистрибутива:

import express from "npm:express@next";

Поддержка пакетов npm в deno cache

deno cache теперь понимает спецификатор npm::

deno cache --unstable npm:chalk@5 npm:express

Новый API возвращает системную локаль:

$ LC_ALL=es_ES deno
> navigator.language
"es-ES"

Кроме того, поддерживается navigator.languages, возвращающий массив предпочитаемых локалей, в котором первый элемент идентичен navigator.language.

deno task стабилен

deno task теперь считается стабильным и не будет сильно изменяться в будущем. Соответствующее предупреждение было удалено из утилиты.

INIT_CWD в deno task

Задачи deno task по-умолчанию запускаются в той рабочей директории, в которой лежит файл deno.json. Новая переменная окружения $INIT_CWD позволяет перейти в каталог, из которого команда была вызвана:

{
  "tasks": {
    "my_task": "cd $INIT_CWD && pwd"
  }
}

Обработка ошибок в асинхронно запущенных командах в deno task

Прежде, если несколько команд в deno task были запущены асинхронно, и она из них падала, вторая могла продолжить работу скрытно от пользователя:

{
  "tasks": {
    "start": "deno run --allow-net server.ts & deno run --allow-net client.ts"
  }
}

С этого релиза при ошибке в любой асинхронной команде Deno завершает все команды.

И другое

Это только самые интересные обновления, остальные включаются изменения в API, обновления V8 до версии 10.8 и прочее. Полный список доступен в блоге Deno.

Материал подготовлен с ❤️ редакцией Кухни IT.

Олег Ямников

Олег Ямников

Главный кухонный корреспондент.