Оголошення про Deno 2

(Оригінально опубліковано на deno.com/blog.)

Веб — це найбільша програмна платформа людства, і розробка для неї означає можливість досягти понад 5 мільярдів людей. Але з того часу, як веб-розробка прискорилась останніми роками, вона стала надзвичайно складною та непідвладною контролю. Перш ніж написати перший рядок коду, розробники змушені боротися з нудними налаштуваннями та прокладати шлях через зайвий шаблонний код, коли вони хочуть зосередитись на випуску продукту та наданні цінності користувачам.

Проте, незважаючи на ці складнощі, JavaScript, мова вебу, залишалася найпопулярнішою мовою протягом останнього десятиліття, з тим, що TypeScript швидко наближається до третьої позиції.
Це свідчення універсальності та корисності JavaScript для веб-розробки — і ознака того, що JavaScript не зникне.

pic

Перегляньте наше відео-оголошення, яке містить запитання та відповіді з командою.

В прагненні спростити веб-програмування, ми створили Deno: сучасний, універсальний інструментальний ланцюг без необхідності налаштувань для розробки на JavaScript та TypeScript.

  • Нативна підтримка TypeScript
  • Побудовано на веб-стандартах: Promises, fetch та ES Modules
  • Вбудовані інструменти: вбудований форматер, лінтер, перевірка типів, тестова бібліотека, компіляція в виконуваний файл та інше
  • Безпека за замовчуванням, як у браузерах

Сьогодні сотні тисяч розробників люблять використовувати Deno, а репозиторій став одним із найбільш популярних Rust-проектів на GitHub, поступаючись лише самій мові Rust.

Хоча ми досягли великого прогресу в Deno 1, наступна основна версія зосереджена на використанні Deno в масштабах великих проєктів.
Це означає безперешкодну взаємодію з існуючою інфраструктурою JavaScript і підтримку ширшого спектра проєктів та команд розробників.
Усе це без жодних компромісів щодо простоти, безпеки та природи "все включено", яку так люблять користувачі Deno.

Сьогодні ми раді анонсувати Deno 2, який включає:

  • Зворотну сумісність з Node.js та npm, що дозволяє безперешкодно запускати існуючі Node додатки
  • Нативну підтримку package.json та node_modules
  • Управління пакетами з новими командами deno install, deno add та deno remove
  • Стабілізовану стандартну бібліотеку
  • Підтримку приватних npm-реєстрів
  • Підтримку робочих просторів і монорепозиторіїв
  • Версії з довгостроковою підтримкою (LTS)
  • JSR: сучасний реєстр для обміну бібліотеками JavaScript між різними середовищами виконання

Ми також постійно вдосконалюємо багато існуючих функцій Deno:

  • deno fmt тепер може форматувати HTML, CSS та YAML
  • deno lint тепер має правила, специфічні для Node, та швидкі виправлення
  • deno test тепер підтримує виконання тестів, написаних за допомогою node:test
  • deno task тепер може виконувати скрипти з package.json
  • HTML-виведення deno doc покращено: новий дизайн та кращий пошук
  • deno compile тепер підтримує підпис коду та значки на Windows
  • deno serve тепер може запускати HTTP сервери на кількох ядрах, паралельно
  • deno init тепер може створювати каркас бібліотек або серверів
  • deno jupyter тепер підтримує виведення зображень, графіків та HTML
  • deno bench підтримує критичні секції для точніших вимірювань
  • deno coverage тепер може виводити звіти у форматі HTML

Зворотна сумісність, орієнтованість на майбутнє

Deno 2 є зворотно сумісним з Node та npm.
Це дає змогу не лише запускати Deno в поточних Node проектах, але й поступово впроваджувати елементи інструментів Deno "все в одному". Наприклад, ви можете використовувати команду deno install після того, як склонуєте Node проект, щоб встановити залежності миттєво, або запустити команду deno fmt для форматування коду без необхідності використовувати Prettier.

Сумісність Deno 2 з Node та npm є потужною. Deno 2 розуміє package.json, папку node_modules і навіть npm робочі простори, що дозволяє запускати Deno в будь-якому Node проекті, що використовує ESM. І якщо потрібно внести незначні зміни в синтаксис, ви можете виправити це за допомогою команди deno lint --fix.

Не любите безлад у package.json та папці node_modules, але все одно потрібно використовувати npm пакет? Ви можете безпосередньо імпортувати npm пакети, використовуючи специфікатори npm:. Без package.json і папки node_modules, Deno встановить ваш пакет у глобальний кеш.
Це дозволяє писати програми з npm залежностями в одному файлі — без необхідності в маніфесті залежностей, конфігураційних файлах чи папці node_modules.

import chalk from "npm:[email protected]";  

console.log(chalk.blue("Привіт, світ!"));  
// Привіт, світ! (синім кольором)

Для більших проектів маніфест залежностей спрощує керування залежностями. Вставивши специфікатор npm: в карту імпортів файлу deno.json, можна імпортувати тільки ім’я пакету:

// deno.json  
{  
 "imports": {  
 "chalk": "npm:[email protected]"  
 }  
}
import chalk from "chalk";  

console.log(chalk.blue("Привіт, світ!"));  
// Привіт, світ! (синім кольором)

З можливістю імпортувати npm пакети через специфікатор npm:, ви можете отримати доступ до більше ніж 2 мільйонів npm модулів у Deno. Це навіть включає складні пакети, такі як gRPC, ssh2, Prisma, temporal.io, duckdb, polars.
Deno навіть підтримує такі розширені функції, як Node-API рідні аддони.

Нарешті, ви можете використовувати Deno 2 разом з вашим улюбленим фреймворком для JavaScript. Deno 2 підтримує Next.js, Astro, Remix, Angular, SvelteKit, QwikCity та багато інших фреймворків.

Deno тепер має менеджер пакетів з deno install

Deno 2 не тільки підтримує package.json та папку node_modules, але й містить три важливі підкоманди, які дозволяють зручно встановлювати та керувати залежностями.

deno install встановлює ваші залежності з блискавичною швидкістю. Якщо у вас є package.json, він створить папку node_modules за лічені миті. Якщо ви не використовуєте package.json, усі ваші залежності будуть кешовані в глобальному кеші.

deno install на 15% швидше за npm з холодним кешем та на 90% швидше з гарячим кешем.
Ми вже надзвичайно швидкі в цьому, але очікуйте ще більше покращень, особливо в сценаріях з холодним кешем, у найближчі тижні.

pic

deno add та deno remove можна використовувати для додавання та видалення пакетів з вашого package.json або deno.json.
Якщо ви раніше використовували npm install або npm remove, ці команди будуть вам дуже знайомі.

pic

pic

Реєстр JavaScript

На початку цього року ми представили сучасний, з відкритим кодом реєстр JavaScript, який називається JSR.

Цей реєстр нативно підтримує TypeScript (ви можете публікувати модулі як вихідний код TypeScript), обробляє нюанси завантаження модулів у різних середовищах і виконуваних середовищах, дозволяє використовувати лише ESM, автоматично генерує документацію з коментарів у стилі JSDoc та може використовуватись з системами, схожими на npm та npx (так, JSR перетворює TypeScript у файли .js та .d.ts).

Оскільки ви завантажуєте TypeScript у JSR, він має чудове розуміння коду, який публікується.
Це дозволяє нам забезпечити безперебійну роботу для розробників як при публікації, так і при використанні модулів. Якщо вас цікавлять деталі, ви можете прочитати нашу статтю про те, як ми розробляли JSR.

Стандартна бібліотека тепер стабільна

Хоча на npm доступно більше 2 мільйонів модулів, процес пошуку, оцінки та використання нового модуля може бути довгим і трудомістким. Саме тому ми вже більше 4 років працюємо над Стандартною бібліотекою Deno.

Стандартна бібліотека складається з десятків модулів утиліт, які ретельно перевіряються і охоплюють все, від маніпуляцій з даними, веб-логіки, до специфічних для JavaScript функціональностей і багато іншого.
Вона доступна на JSR і може бути використана іншими середовищами виконання та платформами.

Щоб дати вам уявлення про те, які модулі доступні в Стандартній бібліотеці Deno, ось частковий список модулів Стандартної бібліотеки та їх еквівалентів на npm:

pic

Для повного списку доступних пакетів відвідайте https://jsr.io/@std.

Приватні npm реєстри

Приватні npm реєстри в Deno 2 працюють так само, як і в Node та npm, за допомогою.npmrcфайлу:

// .npmrc  
@mycompany:registry=http://mycompany.com:8111/  
//mycompany.com:8111/:\_auth=secretToken

Deno автоматично підхопить цей файл .npmrc і дозволить вам завантажувати приватні пакети без додаткової конфігурації.

Робочі простори та монорепозиторії

Deno 2 також підтримує робочі простори, що є потужним рішенням для керування монорепозиторіями. Просто використовуйте атрибут workspace у вашому файлі deno.json, щоб перерахувати директорії-члени:

// deno.json  
{  
 "workspace": ["./add", "./subtract"]  
}

Ці учасники можуть мати окремі залежності, налаштування лінтера та форматувальника, і багато іншого.

Deno не тільки підтримує робочі простори для пакунків Deno, а й розуміє npm робочі простори.
Це означає, що ви можете створити гібридний монорепозиторій Deno-npm (дивіться цей приклад), з учасниками робочого простору, які мають або package.json, або deno.json:

pic

Цей приклад монорепозиторію містить змішані учасники npm та Deno.

Ви також можете публікувати учасників робочого простору в JSR за допомогою команди deno publish. Для прикладу, зверніться до Стандартної бібліотеки Deno. Не потрібно вручну визначати, в якому порядку потрібно публікувати ваші пакунки — просто запустіть deno publish, і він зробить це за вас.

LTS

Зазвичай командам розробників у великих організаціях потрібно ретельно перевіряти нові випуски перед їх використанням в продакшн середовищі. Оскільки в Deno є щотижневі випуски з виправленнями помилок і 6 випусків з незначними оновленнями кожні шість тижнів, це може стати досить трудомістким процесом.
Щоб спростити життя цим командам, ми вводимо канал випусків Long Term Support (LTS).

Починаючи з Deno 2.1, канал LTS буде отримувати критичні виправлення помилок, перенесені назад протягом шести місяців, що забезпечить стабільну та надійну основу для використання в продакшн середовищі. Після шести місяців буде створена нова гілка LTS, заснована на останній стабільній версії. Усі випуски LTS будуть безкоштовно доступні та ліцензовані за ліцензією MIT, що робить їх доступними для будь-якої команди, яка потребує більш стабільного та безпечного середовища.

pic

Починаючи з Deno 2.1, ми введемо гілку LTS, яку будемо підтримувати та переносити критичні виправлення помилок протягом шести місяців.

Нарешті, для команд, яким потрібна розширена підтримка, ми запустили програму Deno для Enterprise. Вона пропонує пріоритетну підтримку, прямий доступ до наших інженерів, гарантовані часи відповіді та пріоритет для ваших запитів на нові функції.
Ми співпрацюємо з такими компаніями, як Netlify, Slack та Deco.cx, щоб допомогти їхнім інженерам працювати швидше та приносити більше користі своїм користувачам.

Deno — це швидко!

Ми доклали великих зусиль, щоб зробити Deno швидким у різноманітних реальних сценаріях. Наша увага спрямована на досягнення покращень продуктивності, які дійсно мають значення в повсякденній розробці на JavaScript та TypeScript — незалежно від того, йдеться про час запуску, обробку складних запитів чи загальну ефективність.

Хоча бенчмарки ніколи не можуть повністю відображати ситуацію, вони можуть дати уявлення про те, в чому саме середовище виконання (runtime) досягає успіху.
Ось кілька бенчмарків, які демонструють сильні сторони Deno, показуючи його здатність забезпечувати високу продуктивність як для розробників, так і для виробничих середовищ.

pic

Будь ласка, зверніться до посилань під кожним графіком для додаткових деталей та відтворюваних кроків.

Виправлення: Перший HTTP бенчмарк, показаний вище, був проведений за допомогою Deno 1.45, а не Deno 2.0. Насправді, Deno 2.0 приблизно на 20% повільніше, ніж показано тут. Ця різниця виникла через недавнє вимкнення стиснення вказівників V8, щоб вирішити проблеми, коли користувачі перевищували ліміт купи 4 ГБ.
Ми плануємо скоро знову увімкнути стиснення вказівників, оскільки це ідеальне значення за замовчуванням для більшості користувачів, а також ввести збірку deno64 для тих, хто потребує більших куп.

Часті запитання

Якщо Deno повністю сумісний з Node, чому я маю використовувати Deno замість Node?

Хоча Deno може запускати програми Node, він розроблений для того, щоб просувати JavaScript і TypeScript вперед. Deno пропонує функції, яких немає в Node, такі як нативна підтримка TypeScript, веб-стандартні API, повний набір інструментів для розробки на JavaScript і модель виконання, орієнтована на безпеку за замовчуванням — все це в одному виконуваному файлі без зовнішніх залежностей.
Використання Deno замість Node може зекономити час на налаштування та конфігурацію, дозволяючи вам швидше почати писати код і приносити користь.

Чи буде діяти система дозволів Deno за замовчуванням при виконанні програм Node?

Так, модель виконання Deno, орієнтована на безпеку за замовчуванням, застосовується також під час запуску програм Node або імпорту npm-модулів, гарантуючи такий самий рівень безпеки.

Чому новий логотип? Що сталося з милим динозавром-маскотом?

З самого початку милий сухопутний динозавр під дощем був обличчям Deno. Його дивний шарм завжди був відмінною рисою Deno, але дизайн ніколи не був однозначним — існували принаймні дві "офіційні" версії та безліч варіантів. З виходом Deno 2.0 ми вирішили, що настав час для оновлення.

Ми хотіли зберегти суть оригінального персонажа, якого люблять користувачі Deno, надаючи йому більш витончений вигляд, що відповідає професійному та виробничому характеру Deno. Під час редизайну ми зрозуміли, що дощовий фон, хоч і ностальгічний, погано масштабується і часто залишається непоміченим.
Він був занадто насичений, особливо при малих розмірах, тому нам довелося від нього відмовитися.

Після багатьох ітерацій ми з'ясували, що спрощення дизайну до основних елементів знайшло правильний баланс — простий та дружній, але серйозний і надійний — як і сам Deno.

(Не переживайте, милий динозавр все ще з нами!)

Deno почався з амбітного бачення модернізації JavaScript. Але, з урахуванням усієї роботи, спрямованої на зворотну сумісність, що залишилося від початкового бачення Deno?

Переписування всього JavaScript-екосистеми є непрактичним. Оскільки Deno розширився за межі малих програм, ми зрозуміли, що підтримка сумісності з Node та npm є необхідною — особливо для інструментів, таких як gRPC і AWS SDKs, які неможливо переписати з нуля.

Але мета Deno не полягає в тому, щоб стати клоном Node на Rust або простим замінником. Наша мета — підняти JavaScript на новий рівень, рухаючись поза CommonJS 2010 року та зменшуючи розрив між серверними і браузерними середовищами таким чином, щоб розробники могли практично їх використовувати.
Ми відмовляємося прийняти, що JavaScript повинен залишатися хаосом з інструментів, що не підходять один до одного, і нескінченними шарами транспіляції, не здатними еволюціонувати.

Початкове бачення Deno залишається основою всього, що ми робимо. Це включає в себе нативну підтримку TypeScript, вбудовані веб-стандарти, такі як Promises, top-level await, Wasm, fetch та ES Модулі, а також інструментальний ланцюжок, який включає всі необхідні компоненти — все це упаковано в один виконуваний файл без залежностей. І, звичайно, він безпечний за замовчуванням, як і сам веб.

Підтримка npm — це лише один крок на шляху до того, щоб зробити Deno більш універсальним. Наша місія — надавати сучасний, спрощений інструментальний ланцюжок, який покращує досвід роботи з JavaScript — а не лише підтримувати старий код. Хоча ми й змінили підхід, наша мета залишається тією ж: спрощувати та надавати можливості для веб-розробки.

Мені подобався Deno, бо він не потребував конфігураційних файлів, але з новими додаваннями в менеджер пакунків, чи не стає Deno 2 більше схожим на Node, де для додавання залежностей потрібно мати package.json?

Зовсім ні.
Ви все ще можете запускати однобайтові програми або скрипти без будь-яких конфігураційних файлів або маніфестів залежностей — нічого в цьому не змінилося. Нові команди для керування пакунками (deno install, deno add та deno remove) є необов'язковими інструментами, створеними для спрощення керування залежностями, чи то у файлі deno.json, чи у файлі package.json. Вони особливо корисні для більших, складніших проєктів, але не заважатимуть, якщо ви надаєте перевагу простоті відсутності конфігурацій.

Однією з наших основних цілей є те, що Deno має підтримувати прості однобайтові програми, які можуть імпортувати будь-який пакет без додаткових налаштувань. Наприклад, у таких контекстах, як Jupyter ноутбуки або швидкі скрипти, ви можете легко зробити:

import * as Plot from "npm:@observablehq/plot";

Водночас Deno здатен масштабуватися для обробки великих проєктів з кількома файлами або навіть кількома пакетами, наприклад, у монорепозиторіях.
Ця гнучкість гарантує, що Deno буде ефективним як для малих скриптів, так і для великих, продукційних додатків.

У мене є проєкт Fresh. Чи є порушення сумісності при оновленні до Deno 2?

Ні! Ваш проєкт Fresh повинен працювати без змін з Deno 2 — жодних змін не потрібно.

Коли Deno 2 буде доступний на Deno Deploy?

Невдовзі!

Що далі

Deno 2 бере всі функції, які розробники полюбили в Deno 1.x — нульову конфігурацію, універсальний інструмент для розробки JavaScript та TypeScript, підтримку веб-стандартів API, безпечне за замовчуванням виконання — і робить їх повністю сумісними з Node та npm (в ESM). Це не тільки спрощує використання Deno в будь-якому Node-проєкті, але й дозволяє поступово впроваджувати Deno (наприклад, запускати deno fmt або deno lint) у більших, складніших проєктах.
Разом з покращеним керуванням пакетами, JSR та низкою функцій для більш просунутих команд розробників, Deno готовий спростити та пришвидшити ваш процес розробки вже сьогодні.

Проте, з огляду на величезні можливості Deno, нам не вдалося охопити все в одному блозі та відео. Є багато захоплюючих функцій і варіантів використання Deno, про які ми не згадали. Наприклад, можливість використання deno compile, щоб перетворити JavaScript гру на десктопний виконуваний файл з підтримкою крос-компіляції (так, для Windows). Або підтримка Jupyter notebook в Deno, яка дозволяє досліджувати та візуалізувати дані за допомогою TypeScript та @observable/plot.
Або генерування документації або статичної документаційної сторінки з ваших коментарів JSDoc та вихідного коду за допомогою deno doc.

pic

Запрошуємо вас спробувати Deno 2 вже сьогодні та відчути майбутнє розробки на JavaScript та TypeScript. Почніть працювати з Deno 2 зараз:

Приєднуйтесь до нашої спільноти, і давайте разом формувати майбутнє JavaScript!

Перекладено з: Announcing Deno 2

Leave a Reply

Your email address will not be published. Required fields are marked *