(Оригінально опубліковано на deno.com/blog.)
Веб — це найбільша програмна платформа людства, і розробка для неї означає можливість досягти понад 5 мільярдів людей. Але з того часу, як веб-розробка прискорилась останніми роками, вона стала надзвичайно складною та непідвладною контролю. Перш ніж написати перший рядок коду, розробники змушені боротися з нудними налаштуваннями та прокладати шлях через зайвий шаблонний код, коли вони хочуть зосередитись на випуску продукту та наданні цінності користувачам.
Проте, незважаючи на ці складнощі, JavaScript, мова вебу, залишалася найпопулярнішою мовою протягом останнього десятиліття, з тим, що TypeScript швидко наближається до третьої позиції.
Це свідчення універсальності та корисності JavaScript для веб-розробки — і ознака того, що JavaScript не зникне.
Перегляньте наше відео-оголошення, яке містить запитання та відповіді з командою.
В прагненні спростити веб-програмування, ми створили 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 та YAMLdeno lint
тепер має правила, специфічні для Node, та швидкі виправленняdeno test
тепер підтримує виконання тестів, написаних за допомогоюnode:test
deno task
тепер може виконувати скрипти зpackage.json
- HTML-виведення
deno doc
покращено: новий дизайн та кращий пошук deno compile
тепер підтримує підпис коду та значки на Windowsdeno serve
тепер може запускати HTTP сервери на кількох ядрах, паралельноdeno init
тепер може створювати каркас бібліотек або серверівdeno jupyter
тепер підтримує виведення зображень, графіків та HTMLdeno 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% швидше з гарячим кешем.
Ми вже надзвичайно швидкі в цьому, але очікуйте ще більше покращень, особливо в сценаріях з холодним кешем, у найближчі тижні.
deno add
та deno remove
можна використовувати для додавання та видалення пакетів з вашого package.json
або deno.json
.
Якщо ви раніше використовували npm install
або npm remove
, ці команди будуть вам дуже знайомі.
Реєстр 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:
Для повного списку доступних пакетів відвідайте 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
:
Цей приклад монорепозиторію містить змішані учасники npm та Deno.
Ви також можете публікувати учасників робочого простору в JSR за допомогою команди deno publish
. Для прикладу, зверніться до Стандартної бібліотеки Deno. Не потрібно вручну визначати, в якому порядку потрібно публікувати ваші пакунки — просто запустіть deno publish
, і він зробить це за вас.
LTS
Зазвичай командам розробників у великих організаціях потрібно ретельно перевіряти нові випуски перед їх використанням в продакшн середовищі. Оскільки в Deno є щотижневі випуски з виправленнями помилок і 6 випусків з незначними оновленнями кожні шість тижнів, це може стати досить трудомістким процесом.
Щоб спростити життя цим командам, ми вводимо канал випусків Long Term Support (LTS).
Починаючи з Deno 2.1, канал LTS буде отримувати критичні виправлення помилок, перенесені назад протягом шести місяців, що забезпечить стабільну та надійну основу для використання в продакшн середовищі. Після шести місяців буде створена нова гілка LTS, заснована на останній стабільній версії. Усі випуски LTS будуть безкоштовно доступні та ліцензовані за ліцензією MIT, що робить їх доступними для будь-якої команди, яка потребує більш стабільного та безпечного середовища.
Починаючи з Deno 2.1, ми введемо гілку LTS, яку будемо підтримувати та переносити критичні виправлення помилок протягом шести місяців.
Нарешті, для команд, яким потрібна розширена підтримка, ми запустили програму Deno для Enterprise. Вона пропонує пріоритетну підтримку, прямий доступ до наших інженерів, гарантовані часи відповіді та пріоритет для ваших запитів на нові функції.
Ми співпрацюємо з такими компаніями, як Netlify, Slack та Deco.cx, щоб допомогти їхнім інженерам працювати швидше та приносити більше користі своїм користувачам.
Deno — це швидко!
Ми доклали великих зусиль, щоб зробити Deno швидким у різноманітних реальних сценаріях. Наша увага спрямована на досягнення покращень продуктивності, які дійсно мають значення в повсякденній розробці на JavaScript та TypeScript — незалежно від того, йдеться про час запуску, обробку складних запитів чи загальну ефективність.
Хоча бенчмарки ніколи не можуть повністю відображати ситуацію, вони можуть дати уявлення про те, в чому саме середовище виконання (runtime) досягає успіху.
Ось кілька бенчмарків, які демонструють сильні сторони Deno, показуючи його здатність забезпечувати високу продуктивність як для розробників, так і для виробничих середовищ.
Будь ласка, зверніться до посилань під кожним графіком для додаткових деталей та відтворюваних кроків.
Виправлення: Перший 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
.
Запрошуємо вас спробувати Deno 2 вже сьогодні та відчути майбутнє розробки на JavaScript та TypeScript. Почніть працювати з Deno 2 зараз:
- Вступ до Deno (документація)
- Посібник з міграції з 1.x ⇒ 2
- Серія уроків по Deno
- Переглянути ключову доповідь на запуску Deno 2
Приєднуйтесь до нашої спільноти, і давайте разом формувати майбутнє JavaScript!
Перекладено з: Announcing Deno 2