Deno 1.27 выпущена с фичами и изменениями в списке ниже:
- Улучшение языкового сервера/IDE
- Улучшение совместимости с
npm
- Онлайн-API
navigator.language
- Улучшение
deno task
- Проверка обновлений
- Изменения в API
Deno
- Обновление
deno lint
- V8 10.8
- Улучшение совместимости с Node.js
- Изменение в API стандартных библиотек
Детали — под катом к старту курса по Fullstack-разработке на Python.
Чтобы посмотреть все востребованные профессии, кликните по баннеру.
Если у вас уже установлен Deno, обновиться до версии 1.27 можно этой командой:
deno upgrade
А если вы устанавливаете Deno впервые — этой:
# MacOS and Linux
curl -fsSL https://deno.land/x/install/install.sh | sh
# Windows
iwr https://deno.land/x/install/install.ps1 -useb | iex
Здесь можно узнать больше об опциях установки.
Улучшения языкового сервера/IDE
Встроенные подсказки
В версии 4.4 в TypeScript добавлена поддержка встроенных в код подсказок (inlay hints). В данном релизе Deno этот функционал раскрывается для LSP. Встроенные подсказки — небольшие информационные сниппеты, добавленные прямо в код. Они дают дополнительную информацию о коде. Во многих отношениях их можно назвать встроенной в код альтернативой подсказкам, всплывающим при наведении.
Примечание переводчика. В оригинале использовано очень ёмкое выражение "inline hover", где inlay (встроенные [в код]) стало прилагательным, а противоположное ему по смыслу hover существительным ([альтернативы] наведения [мыши]), для раскрытия смысла которого понадобилось 7 русских слов (встроенной в код альтернативой подсказкам при наведении). О том, что речь идёт именно об альтернативе становится окончательно ясно из следующего большого абзаца (после 2 скриншотов).
Вид кода без встроенных подсказок:
Код после активации встроенных подсказок:
Видеть и понимать скрытые выведенные типы без необходимости в наведении на них курсора бывает очень полезно. Со встроенными подсказками код читается значительно легче. Эти подсказки заполняют информационные пробелы в коде. Это особенно актуально при работе с TypeScript или JavaScript с проверкой типов. При использовании скрытых подсказок в коде сохраняется число явных аннотаций типов, а сам код остаётся читаемым.
Вот несколько настроек встроенных подсказок:
-
deno.inlayHints.enumMemberValues.enabled
— активация/деактивация встроенных подсказок для значенийenum
. По умолчаниюfalse
. -
deno.inlayHints.functionLikeReturnTypes.enabled
— активация/деактивация встроенных подсказок для неявных типов возврата функций. По умолчаниюfalse
. -
deno.inlayHints.parameterNames.enabled
— активация/деактивация встроенных подсказок для названий параметров. Доступные значения:"none"
,"literals"
,"all"
. По умолчанию"none"
. -
deno.inlayHints.parameterNames.suppressWhenArgumentMatchesName
— скрывать встроенные подсказки при совпадении названий аргумента и параметра. По умолчаниюtrue
. -
deno.inlayHints.parameterTypes.enabled
— активация/деактивация встроенных подсказок для неявных типов параметров. По умолчаниюfalse
. -
deno.inlayHints.propertyDeclarationTypes.enabled
— активация/деактивация встроенных подсказок для неявных объявлений свойств. По умолчаниюfalse
. -
deno.inlayHints.variableTypes.enabled
— активация/деактивация встроенных подсказок для неявных типов переменных. По умолчаниюfalse
. -
deno.inlayHints.variableTypes.suppressWhenTypeMatchesName
— подавление подсказок типов при совпадении названия переменной и неявного типа. По умолчаниюtrue
. -
editor.inlayHints.enabled
— контролирует статус активации встроенных подсказок в VS Code. Доступные значения:"off"
,"offUnlessPressed"
,"on"
или"onUnlessPressed"
.
Visual Studio Code поддерживает скрытые подсказки, а последний релиз расширения Deno VS Code поддерживает соответствующие опции настройки. Для других редакторов и плагинов возможность поддержки встроенных подсказок и способы установки параметров конфигурации необходимо уточнить.
Заполнение регистра
Хотя это и не связано с конкретным релизом, следует отметить, что мы недавно улучшили заполнение регистра в поддерживающих его редакторах. Теперь при вводе названия стороннего модуля из deno.land/x
в интеллектуальном редакторе используется поисковая система, на которой работает поиск модуля в deno.land
. При этом также предоставляются описание модуля и информация о популярности.
Улучшения коснулись завершения пути импорта, где информация о документации интегрируется в отображаемый текст и остаётся доступной при наведении мыши на import. Чтобы предоставить всю эту информацию редактору, авторы сторонних модулей могут пользоваться тегом JSDoc @module
в первом блоке JSDoc в первом блоке JSDoc в верхней части модуля.
В Visual Studio Code заполнение регистра для deno.land/x
активно по умолчанию. Проверьте способ настройки deno.suggest.imports.hosts
в других редакторах, чтобы убедиться, что https://deno.land
работает в смысле заполнения регистра.
Вот видео с заполнением регистра в действии:
Исправление багов
Несколько исправленных багов в этом релизе были связаны с языковым сервером (language server). В частности, языковой сервер неверно обрабатывал строковые переменные "snippet". Также проблемы возникали при автоимпорте и автодополнении кода в JSX, что приводило к странному поведению. Оба бага исправлены.
Улучшение совместимости с npm
Процесс работы с пакетами npm в Deno продолжает совершенствоваться:
Проверка типа, поддержка LSP
Теперь Deno автоматически извлекает типы TypeScript из распространяющих типы npm-пакетов.
Для иных пакетов можно использовать директиву @deno-types
, которая иерархически выше import
, чтобы указать соответствующий пакет @types
package, если он есть:
// @deno-types="npm:@types/chalk@4"
import chalk from "npm:chalk@4";
Для пакетов, которым требуется @types/node
, вы можете указать директиву reference-types
с тройным слешем для извлечения типов Node:
/// <reference types="npm:@types/node" />
// @deno-types="npm:@types/express@4"
import express from "npm:express@4.18";
Отметим, что таким образом Deno будет использовать глобальные типы Node (например setTimeout(...): NodeJS.Timeout
) вместо типов, совместимых с браузером (например, setTimeout(...): number
) в типах для пакетов npm. Эти глобальные типы будут изолированы от пакетов npm и поэтому не должны влиять на типы в вашем коде Deno:
Node-API
Теперь Deno поддерживает Node-API (ранее — N-API) в рамках пакетов npm. Node-API позволяет использовать собственный нативный код Node.js. То есть такие пакеты, как parcel
, sqlite3
, usb
и fs-xattr
теперь могут использоваться с Deno.
Помните, что для этого необходим флаг --allow-ffi
:
Lockfile v2
Разрешение пакетов npm и их целостность теперь сохраняются при использовании файла блокировки (lockfile
):
# lock.json will include information about npm packages referenced in main.ts
deno cache --lock=lock.json --lock-write main.ts
Заметим, что в релизе 1.28 планируем прописать файл блокировки по умолчанию при использовании файла deno.json
. Обновления описаны в issue #11971.
Теги dist в спецификаторах npm
Регистр npm позволяет помечать версии именами. Например, у express есть тег "next", которым на момент написания оригинала этого текста была помечена версия 5.0.0-beta.1
.
Теперь указывать эти теги dist можно в требованиях к версии для спецификаторов npm:
// will import 5.0.0-beta.1 at the time of writing this
import express from "npm:express@next";
Обратите внимание, что теги dist по-прежнему не поддерживаются, если появляются в файле package.json
пакета. Мы знаем об этом баге и вскоре устраним его. Обновления описываются в issue #16321.
Кеширование определителей npm напрямую через аргументы к deno cache
deno cache
теперь поддерживает спецификаторы npm в командной строке:
deno cache --unstable npm:chalk@5 npm:express
Это позволит выгрузить информацию о пакетах и разрешенные версии этих пакетов в глобальный npm-кеш Deno:
navigator.language
Web API
В Deno v1.27 появляется API navigator.language
. Это доступное только для чтения свойство, которое возвращает строковую переменную, представляющую собой предпочтительный язык системы пользователя:
$ deno
> navigator.language
"en-EN"
Возвращаемая строковая переменная языка — тег BCP 47.
На значение, которое возвращает этот API, могут влиять переменные среды, задающие системную локаль, например LC_ALL
:
$ LC_ALL=es_ES deno
> navigator.language
"es-ES"
Поддерживается API navigator.languages
. Он возвращает массив предпочитаемых языковых настроек, первое значение в котором идентично navigator.language
.
За фичу спасибо Луке Матею Пинитийе.
Улучшение deno task
Предупреждение «deno task is unstable and may drastically change in the future» («deno task нестабилен и в дальнейшем может быть радикально изменён» удалено. deno task
оказался полезным, поэтому его радикальных изменений не предвидится. Тем не менее мы можем внести ряд изменений в его окружение, что облегчит работу в будущем, например ввести новые кросс-платформенные команды или переменные окружения.
Переменная среды INIT_CWD
Выполняемая задача будет иметь тот же текущий рабочий каталог, что и файл с определением задачи — deno.json
. Для некоторых сценариев это может быть нежелательно. Вы также можете желать узнать, в каком каталоге пользователь запустил задачу. Теперь это возможно с помощью переменной окружения INIT_CWD
, которая будет установлена с полным путём к директории, где была запущена задача, если INIT_CWD
ещё не установлена. Это соответствует поведению npm run
.
Например, представленная ниже задача заменит текущий рабочий каталог на каталог, из которого пользователь запустил задачу, а затем выдаст обновлённый рабочий каталог (как мы помним, благодаря кросс-платформенности deno task
это работает и на Windows):
{
"tasks": {
"my_task": "cd $INIT_CWD && pwd"
}
}
Теперь при неудачном завершении команды async
прекращается выполнение всей задачи
Возможно, вы использовали deno task
для запуска нескольких команд одновременно, используя асинхронную команду:
{
"tasks": {
"start": "deno run --allow-net server.ts & deno run --allow-net client.ts"
}
}
В прошлом, если команда async
не выполнялась, другая команда продолжала работать, и вы могли этого не заметить. Подобным образом работает большинство оболочек, но такой подход не годится для целей deno task
.
Начиная с этого релиза при неудачном завершении команды async
прекращается выполнение всей задачи. Если же вам нужно, чтобы команда вела себя, как раньше, вы можете добавить || true
после команды, и тогда выходным кодом будет 0
:
{
"tasks": {
"start": "deno run --allow-net server.ts || true & deno run --allow-net client.ts || true"
}
}
Суффиксsleep
к аргументу времени
Команда sleep
в deno task
теперь поддерживается как суффикс к аргументу времени, как указано для sleep
в linux man pages.
За фичу спасибо @sigmaSd.
Проверка на обновления
В базовый набор Deno входит подчинённая команда deno upgrade
, которая упрощает обновление до последней версии Deno. Начиная с этого релиза Deno будет выполнять автоматическую проверку наличия новых версий и сообщать вам об их доступности:
$ deno run app.ts
A new release of Deno is available: 1.26.2 → 1.27.0
Run `deno upgrade` to install it.
Мы позаботились, чтобы такие проверки не влияли на производительность ваших приложений — они выполняются в фоновом режиме не чаще одного раза в день. Фичу можно полностью отключить, установив переменную окружения: DENO_NO_UPDATE_CHECK=1
Изменения в API Deno
Стабилизация API
Следующие API стабилизированы в текущем релизе и больше не требуют флага --unstable
.
Deno.consoleSize()
Deno.futime()
Deno.futimeSync()
Deno.loadavg()
Deno.osRelease()
Deno.stdin.setRaw()
Deno.utime()
Deno.utimeSync()
Другие обновления
-
Deno.kill()
теперь работает без аргумента. При опущенном аргументе функция по умолчанию отправляетSIGTERM
.
-
Deno.getGid()
переименована вDeno.gid()
в рамках подготовки к стабилизации данного API.
-
Deno.getUid()
переименована вDeno.uid()
в рамках подготовки к стабилизации данного API.
-
Добавлена опция
TcpListenOptions.reusePort
. Она позволяет нескольким процессам получать данные с одного адреса и порта. Этой опции нужен флаг--unstable
, и она поддерживается только для Linux.
Обновления deno lint
Встроенный инструмент статического анализа кода получил новый формат отчётов "compact"
, с которым могут быть знакомы пользователи ESLint. Для использования этого формата флаг --compact
выставляется для подчинённой команды deno lint
:
$ deno lint --compact
/dev/deno/foo.js: line 1, col 10 - `foo` is never used (no-unused-vars)
Found 1 problem
Checked 1 file
Вы также можете указать предпочтительный тип отчётов в файле deno.json
:
{
"lint": {
"report": "compact"
}
}
За фичу спасибо Бренли Дюку.
V8 10.8
Этот релиз обновляется до последней версии V8 (10.8, ранее — 10.7).
Важнейшим новым свойством релиза является поддержка поддержки создания копий Change Array
Улучшение совместимости c Node.js
25 октября Node.js 18 получил долгосрочную поддержку (LTS) для версии 18.12.0. В Deno v1.27 набор тестов слоя совместимости Node.js обновлён до совместимости с Node.js v18.12.0. Это означает, что Deno теперь может работать с последним релизом Node.js LTS.
Обратите внимание, что весь слой Node.js требует флага --unstable
.
Другие обновления
-
Реализован модуль
readline/promises
. Этот модуль выдаёт промисы (Promises) на основании API для модуляreadline
. За фичу спасибо @PolarETech.
-
Кодировка
'base64url'
теперь поддерживаетсяhash.digest()
в модулеcrypto
. За фичу спасибо Дениз Акшимшек.
-
Теперь могут загружаться модули
.node
. См. также поддержку Node-API.
-
Улучшена поддержка Windows для
fs.access()
.
-
К API модуля
child_process
добавлена опцияwindowsVerbatimArguments
.
Изменения в стандартной библиотеке API
В данном релизе удалён ряд устаревших API:
-
Модуль
hash
удалён. Теперь его функционал доступен модулюcrypto
.
-
Модуль
textproto
удалён.
-
BSNode
удалён из модуляcollections
с заменой наBinarySearchNode
.
-
BSTree
удалён из модуляcollections
с заменой наBinarySearchTree
.
-
RBNode
удалён из модуляcollections
с заменой наRedBlackNode
.
-
RBTree
удалён из модуляcollections
с заменой наRedBlackTree
.
-
direction
удалён из модуляcollections
с заменой наDirection
.
-
CSVStream
удалён из модуляencoding
с заменой наCsvStream
.
-
Тип
CSVStreamOptions
удалён из модуляencoding
с заменой на типCsvStreamOptions
.
-
Файл
encoding/csv_stringify.ts
удалён с заменой на файлencoding/csv.ts
и другие API.
-
JSONValue
удалён из модуляencoding
с заменой наJsonValue
.
-
JSONParseStream
удалён из модуляencoding
с заменой наJsonParseStream
.
-
JSONStringifyStream
удалён из модуляencoding
с заменой наJsonStringifyStream
.
-
ConcatenatedJSONParseStream
удалён из модуляencoding
с заменой наConcatenatedJsonParseStream
.
-
Функции
listenAndServe()
иlistenAndServeTls()
удалены из модуляhttp
с заменой наserve()
иserveTls()
, соответственно.
-
Потоковый функционал модуля
io
удалён, так как стал доступен для модуляstreams
.
-
Функционал файла
bufio.ts
для модуляio
удалён, так как стал доступен в файлеbuffer.ts
.
-
Функционал файла
ioutil.ts
для модуляio
удалён, так как стал доступен в файлеutil.ts
.
-
Класс
LineStream
удалён из модуляstreams
с заменой наTextLineStream
.
-
Из модуля
testing
удалены все API бенчмарков с заменой наDeno.bench()
.
-
Функции возврата
assertThrows()
иassertRejects()
удалены из модуляtesting
с заменой на другие сигнатуры.
-
Функция
generate()
удалена из модуляuuid
с заменой на функциюrandomUUID()
WebCrypto.
Научим вас веб-разработке, чтобы вы прокачали карьеру и стали востребованным IT-специалистом. Если вы не найдёте работу, мы просто вернём деньги (возврат — акция в рамках «Чёрной пятницы»).
Data Science и Machine Learning
- Профессия Data Scientist
- Профессия Data Analyst
- Курс «Математика для Data Science»
- Курс «Математика и Machine Learning для Data Science»
- Курс по Data Engineering
- Курс «Machine Learning и Deep Learning»
- Курс по Machine Learning
Python, веб-разработка
- Профессия Fullstack-разработчик на Python
- Курс «Python для веб-разработки»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
Мобильная разработка
Java и C#
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия C#-разработчик
- Профессия Разработчик игр на Unity
От основ — в глубину
А также