Первоначально опубликовано на deno.com/blog.
Deno 1.32 был помечен и выпущен со следующими новыми функциями и изменениями:
- Улучшенная совместимость с Node.js
deno compile
поддержка веб-воркеров и динамического импорта- Изменения в
Deno
API - Изменения в веб-API
- Изменения в стандартной библиотеке
- ТайпСкрипт 5.0
- V8 11.2
Если у вас уже установлен 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:
String.prototype.isWellFormed
иString.prototype.toWellFormed
RegExp
v
флаг с установленной нотацией + свойства строкWebAssembly
Хвостовой зов- Экспериментальная поддержка
WebAssembly
Garbage Collection (WasmGC) (требуется--v8-flags=--experimental-wasm-gc
)