Первоначально опубликовано на deno.com/blog.

Deno 1.32 был помечен и выпущен со следующими новыми функциями и изменениями:

Если у вас уже установлен Deno, вы можете обновить его до версии 1.32, запустив:

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

Нажмите здесь, чтобы просмотреть дополнительные параметры установки.

Улучшенная совместимость с Node.js

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

  • Ограниченная установка пакетов: установка пакетов теперь ограничена экземплярами, в которых код использует пустой спецификатор, соответствующий записи в файле package.json.
  • Отложенное обнаружение ошибок: ошибки анализа зависимостей в package.json теперь отображаются ленивым образом, что сводит к минимуму сбои.
  • Контролируемое автоматическое обнаружение. Автоматическое обнаружение Package.json отключается, если установлены флаги --no-config и --no-npm, что обеспечивает больший контроль над процессом.
  • Новая переменная среды. Новая переменная среды DENO_NO_PACKAGE_JSON позволяет полностью запретить Deno разрешать файл package.json в среде.
  • Расширенная поддержка шифрования: добавлена ​​поддержка API createCipheriv и createDecipheriv в "node:crypto", что расширяет диапазон доступных криптографических функций.

Эти целевые улучшения удобства использования в совокупности способствуют более плавной и эффективной разработке при работе с Deno и Node.js.

deno compile поддержка веб-воркеров и динамического импорта

В этом выпуске представлены два очень востребованных обновления для deno compile. Теперь можно использовать динамический импорт и Web Worker API с двоичными файлами, созданными с помощью подкоманды deno compile. В совокупности это упрощает создание многопоточных программ с помощью deno compile.

Если ваши операторы динамического импорта поддаются статическому анализу (или, другими словами, если вы использовали строковые литералы внутри import()), спецификаторы будут автоматически включены в создаваемые двоичные файлы:

// main.js
const dynamicModule = await import("./dynamic_module.js");
console.log(dynamicModule.hello());
// dynamic_module.js
export function hello() {
  return "hello world!";
}
$ deno compile -o dynamic_import_example main.js
Compile file:///dev/main.js
Emit dynamic_import_example
$ ./dynamic_import_example
hello world!

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

// main.js
const worker1 = new Worker(import.meta.resolve("./worker1.js"), {
  type: "module",
});
worker1.postMessage("hello from main!");
worker1.onmessage = (e) => {
  console.log("main received", e.data);
  worker1.terminate();
};
const worker2 = new Worker(import.meta.resolve("./worker2.js"), {
  type: "module",
});
worker2.postMessage("hello from main!");
worker2.onmessage = (e) => {
  console.log("main received", e.data);
  worker2.terminate();
};
// worker1.js
self.onmessage = (e) => {
  console.log("worker1 received:", e.data);
  self.postMessage("hello from worker1!");
};
// worker2.js
self.onmessage = (e) => {
  console.log("worker2 received:", e.data);
  self.postMessage("hello from worker2!");
};
$ deno compile --include worker1.js --include worker2.js -o worker_example main.js
Compile file:///dev/main.js
Emit worker_example
$ ./worker_example
worker1 received: hello from main!
main received hello from worker1!
worker2 received: hello from main!
main received hello from worker2!

Спасибо Andreu Botella за эти функции.

deno run файлов без расширения

Теперь можно запускать файлы без расширения, указав его с помощью флага --ext.

$ cat my_script
#!/usr/bin/env -S deno run --ext=js
console.log("Hello!");
$ ./my_script
Hello!

Спасибо @Cre3per за эту функцию.

Изменения в Deno API

Deno.FileInfo.dev теперь определяется в Windows. Это дополнительное изменение, но из-за него типизация поля Deno.FileInfo.dev была изменена с number | null на number.

Добавлено два новых нестабильных API: Deno.DatagramConn.joinMulticastV4 и Deno.DatagramConn.joinMulticastV6. (Спасибо Sam Gwilym за этот вклад.)

Изменения в веб-API

URLSearchParams.size() теперь поддерживается. (Спасибо Lino Le Van за эту функцию.)

Нестабильный WebGPU API удален. Поддержка WebGPU привела к затратам, из-за которых deno исполняемых файлов стали больше и медленнее для всех пользователей, даже если они их не использовали. В этом выпуске удален нестабильный WebGPU API, но можно исследовать реализации, которые не увеличивают время запуска.

Изменения в стандартной библиотеке

Критические изменения в структуре модуля

Следующие 6 модулей из категории std/encoding в этом выпуске перемещены на верхний уровень стандартной библиотеки.

  • std/encoding/csv был перемещен в std/csv
  • std/encoding/yaml был перемещен в std/yaml
  • std/encoding/toml был перемещен в std/toml
  • std/encoding/json был перемещен в std/json
  • std/encoding/jsonc был перемещен в std/jsonc
  • std/encoding/front_matter был перемещен в std/front_matter

Эти изменения были внесены для улучшения согласованности структуры модуля/каталога в стандартной библиотеке. Например, модуль csv ранее экспортировался из двух разных мест: std/encoding/csv.ts и std/encoding/csv/stream.ts. Теперь csv экспортируется из единого места std/csv/mod.ts (Также каждый отдельный API экспортируется из каждого соответствующего файла. Подробнее см. Документ API). Мы считаем эту структуру более последовательной. Пожалуйста, смотрите вопросы обсуждения (1 2), если вас интересуют подробности.

Спасибо Asher Gomez за работу над этим, а также спасибо Tim Reichen и Lino Le Van за участие в обсуждении.

Типскрипт 5.0

Deno v1.32 поставляется с последней стабильной версией TypeScript. Для получения дополнительной информации о новых функциях TypeScript см. Сообщение в блоге TypeScript 5.0

Обратите внимание, что декораторы ES еще не поддерживаются, но мы будем работать над тем, чтобы включить их по умолчанию в будущей версии.

Улучшения производительности. Наряду с другими преимуществами производительности, которые дает TypeScript 5.0, первоначальная проверка типов Deno стала значительно быстрее, если не проверять типы удаленных модулей — без использования флага — all. Это усовершенствование особенно эффективно для сокращения времени проверки типов в CI в большинстве случаев. Точная экономия времени зависит от количества удаленных модулей в ваших зависимостях, но мы наблюдали более чем двукратное ускорение проверки типов (например, сокращение времени с 2200 мс до 600 мс).

V8 11.2

Этот выпуск обновляется до последней версии V8 (11.2, ранее 11.0).

В этом обновлении доступно несколько новых интересных функций JavaScript: