Оригинальный адрес:blog.log robot.com/'s no-1-0 - я все еще…
Оригинальный автор:David Else
После почти двух лет ожидания было официально объявлено, что Deno 1.0 выйдет 13 мая. Сегодня API заморожен и начинается обратный отсчет.
Благодаря имени основателя и дальновидному видению запуск Deno, несомненно, является самой захватывающей и противоречивой темой JavaScript за последнее время.
Deno — это среда программирования JavaScript/TypeScript общего назначения, которая объединяет многие из лучших технологий с открытым исходным кодом, чтобы предоставить комплексное решение в небольшом исполняемом файле.
Будучи основателем Node.js, Райан Даль также создал Deno. Deno использует преимущества новых функций JavaScript с тех пор, как Node.js был выпущен в 2009 году, а также устраняет недостатки дизайна, которые Райан упомянул в своем «10 главных сожалений о Node.js» (доклад). Некоторые называют его преемником Node.js, но сам автор так не говорил.
В отличие от Node.js, использующего C++, Deno разработан на Rust и построен на Tokio (tokio.rs/, асинхронная среда выполнения Rust). Но, как и Node.js, Deno также использует движок V8 для запуска JavaScript. Встроенный TypeScript — отличительная черта Deno. Хотя перед запуском его необходимо скомпилировать в JavaScript, этот процесс выполняется внутри, поэтому похоже, что Deno изначально поддерживает TypeScript.
1. Начать
Согласно домашней странице официального сайта (deno.land/), вы можете скачать Deno. Чтобы перейти на новую версию, запуститеdeno upgrade
. Если версия Deno, которую вы установили ранее, слишком низкая, вы можете попробовать снова запустить установку скрипта терминала.
Чтобы узнать о подкомандах Deno, используйте любую из следующих команд.
-
deno [subcommand] -h
: показать сводку -
deno [subcommand] --help
: Показать подробную информацию
В этой статье будут представлены ключевые функции Deno 1.0, включая примеры применения этих функций с использованием новейшего синтаксиса. Мы будем использовать TypeScript везде, где это возможно, и эквивалент JavaScript, конечно, подойдет.
Я верю, что вы полюбите Deno после прочтения этой статьи. Эта статья официально приведет читателя к двери разработки Deno.
2. Безопасность
Deno по умолчанию безопасен. Напротив, Node.js по умолчанию имеет доступ к файловой системе и сети.
Для запуска программы, которой нужно запустить подпроцесс без авторизации, например:
deno run file-needing-to-run-a-subprocess.ts
Если требуются соответствующие разрешения, вы увидите предупреждающее сообщение:
error: Uncaught PermissionDenied: access to run a subprocess, run again with the --allow-run flag
Deno использует параметры командной строки, чтобы явно разрешить доступ к различным частям системы. К наиболее часто используемым относятся:
- окружающая обстановка
- Интернет
- файловая система чтение/запись
- запустить подпроцесс
Чтобы увидеть полные разрешения с примерами, запуститеdeno run -h
.
лучшая практика даread
,write
а такжеnet
Используйте белый список разрешений. Это позволяет вам более точно определить, к чему разрешен доступ Deno. Например, чтобы предоставить Deno/etc
Разрешения только для чтения для каталога, вы можете сделать это:
deno --allow-read=/etc
2.1 Ярлыки для использования разрешений
Необходимость авторизоваться каждый раз, когда вы запускаете приложение, может быстро показаться громоздкой. Для этого можно использовать следующий метод.
1. Разрешить все разрешения
можно использовать--allow-all
или ярлык-A
. Это не рекомендуется, поскольку не контролирует определенные разрешения.
2. Напишите bash-скрипт
Напишите сценарий Bash, чтобы запустить приложение с минимальными разрешениями, необходимыми для авторизации приложения.
#!/bin/bash
// 允许运行子进程及文件系统写权限
deno run --allow-run --allow-write mod.ts
Недостатком этого подхода является то, что вы можете захотеть работать, тестирование и упаковку соответственно, чтобы написать скрипт.
3. Использование диспетчера задач
Инструменты GNU можно использоватьmake
Создайте файл, содержащий набор команд Deno и соответствующие разрешения. Также можно использовать специфичную для Deno версию Drake (deno.land/x/drake/).
4. Безопасные исполняемые программы Deno
использоватьdeno install
Установите программу Deno с разрешениями, необходимыми для ее выполнения (GitHub.com/Ноланд/…). После установки путь к этой программе находится по адресу$PATH
внутри.
3. Стандартная библиотека
Стандартная библиотека Deno (deno.land/std/) содержит часто используемые модули, поддерживаемые проектом Deno и гарантированно работающие в Deno. Стандартная библиотека охватывает наиболее часто используемые инструменты, а стиль и функции API отражают стандартную библиотеку языка Go.
JavaScript всегда подвергался критике за отсутствие стандартной библиотеки. Пользователям приходится неоднократно «изобретать велосипед» для этого, а разработчикам часто приходится искать в репозиториях npm модули, решающие распространенные задачи, которые должна обеспечивать платформа.
Сторонние пакеты, которые решают сложные проблемы, такие как React, — это отдельная история, но такие вещи, как генерация UUID (Хорошо. Wikipedia.org/wiki/u_ver…) лучше всего использовать стандартную библиотеку. Эти небольшие библиотеки можно использовать как компоненты больших библиотек, что ускоряет разработку и делает ее менее сложной. Я не знаю, сколько раз популярная библиотека внезапно объявлялась устаревшей, и пользователи могли только сами поддерживать ее или находить новые альтернативные библиотеки. Опросы показывают, что 10-20% широко используемых пакетов программного обеспечения с открытым исходным кодом больше не поддерживаются активно.
3.1 Встроенные модули и соответствующие пакеты npm
Дено модуль | иллюстрировать | пакет нпм |
---|---|---|
colors | Установить цвет для вывода терминала | мел, клер, краски |
datetime | помогите с JavaScriptDate объект |
|
encoding | Добавлена поддержка внешних структур данных, таких как base32, binary, csv, toml и yaml. | |
flags | Помогите с аргументами командной строки | minimist |
fs | Помощь в работе с файловой системой | |
http | Поддержка доступа к локальным файлам через HTTP | http-server |
log | для создания журналов | winston |
testing | Для модульного тестирования и бенчмаркинга | chai |
uuid | Сгенерировать UUID | uuid |
ws | Помогите создать клиент/сервер WebSocket | Ws |
4. Встроенный TypeScript
TypeScript — это надмножество JavaScript с добавлением явных объявлений типов. Любой действительный JavaScript также является допустимым TypeScript, поэтому преобразование вашего кода в TypeScript ничего не стоит. Просто измените расширение на .ts, а затем тип.
С TypeScript в Deno вам не нужно ничего делать. Без Deno вам придется скомпилировать TypeScript в JavaScript, прежде чем вы сможете его запустить. Deno выполняет компиляцию для вас внутри, что упрощает использование TypeScript.
4.1 Используйте свой собственный tsconfig.json
Те, кто знаком с TypeScript, могут знать, как использовать файл tsconfig.json для указания параметров компиляции. Но этот файл не требуется при использовании Deno. Потому что у Deno своя конфигурация по умолчанию. Если вы используете собственный tsconfig.json с параметрами, конфликтующими с Deno, вы увидите предупреждающее сообщение.
Эта функция требует использования-c
options и укажите свой собственный tsconfig.json.
deno run -c tsconfig.json \[file-to-run.ts\]
Подробнее о файле tsconfig.json по умолчанию см. в руководстве Deno (GitHub.com/Ноланд/…).
Если вы похожи на большинство разработчиков, я слышал, что Deno использует стандартнуюstrict
Выкройки обязательно порадуют. Если кто-то преднамеренно не переопределит этот параметр, Deno сделает все возможное, чтобы сообщить пользователю о неаккуратных местах в коде.
5. Deno стремится к веб-стандартам
Веб-стандарты разрабатываются давно, и после того, как они опубликованы, уже никто не может закрывать на это глаза. Несмотря на то, что существуют различные фреймворки, веб-стандарты остаются прежними. Время, потраченное на изучение веб-стандартов, никогда не будет потрачено впустую, потому что никто не посмеет свергнуть сеть. В обозримом будущем, даже до конца вашей карьеры, Интернет будет продолжать существовать и развиваться.
fetch
— это веб-API для получения ресурсов. В браузере есть метод JavaScript, который называетсяfetch()
. Если вы хотите использовать этот стандартный API в Node.js, вам нужно полагаться на сторонний Node Fetch (GitHub.com/node-fetch/…). В Deno этот API встроен, как и версия в браузере, из коробки.
Deno 1.0 предоставляет следующие веб-совместимые API.
- addEventListener
- atob
- btoa
- clearInterval
- clearTimeout
- dispatchEvent
- fetch
- queueMicrotask
- removeEventListener
- setInterval
- setTimeout
- AbortSignal
- Blob
- File
- FormData
- Headers
- ReadableStream
- Request
- Response
- URL
- URLSearchParams
- console
- isConsoleInstance
- location
- onload
- onunload
- self
- window
- AbortController
- CustomEvent
- DOMException
- ErrorEvent
- Event
- EventTarget
- MessageEvent
- TextDecoder
- TextEncoder
- Worker
- ImportMeta
- Location
Все вышеперечисленные API входят в область действия программы верхнего уровня. Это означает, что если вы не используетеDeno()
Любой метод в пространстве имен, ваш код должен работать как в Deno, так и в браузере. Хотя эти API-интерфейсы Deno не на 100 % соответствуют веб-стандартам, это по-прежнему является важным преимуществом для разработчиков интерфейсов.
6. Модули ECMAScript
Одним из основных изменений Deno по сравнению с Node.js является использование официального стандарта модуля ECMAScript вместо старого CommonJS. Node.js не поддерживал модули ECMAScript в 13.2.0 до конца 2019 года, и даже тогда поддержка была неоднородной и требовала включения спорного расширения .mjs.
Deno прощается с прошлым, внедряя современные веб-стандарты в свою модульную систему. На модули можно ссылаться, используя URL-адреса или пути к файлам с обязательными расширениями. Например:
import \* as log from "https://deno.land/std/log/mod.ts";
import { outputToConsole } from "./view.ts";
6.1 Проблемы с использованием расширений
Deno ожидает, что модули будут включать расширения файлов, но TypeScript этого не делает:
Использование расширения — логичный и очевидный способ. К сожалению, реальность всегда сложнее идеала. На данный момент расширение Visual Studio Code Deno (7.Управление пакетами в проектах Denoчтобы решить эту проблему.
Создатели TypeScript, похоже, по-своему подходят к этому вопросу. Я не думаю, что будет легкое решение этой проблемы, пока CommonJS не будет окончательно заброшен.
Нам нужно немного больше терпения для мудрых, но старых богов программирования. Будем надеяться, что они скоро избавятся от этих устаревших форматов и накажут парней, которые держатся за них и причиняют нам боль.
<h2 id=)[Подход Deno к управлению пакетами сильно изменился. Вместо того, чтобы полагаться на централизованные репозитории, управление пакетами Deno отличается децентрализацией. Любой может разместить пакет, как и любой тип файла в Интернете. ] (marketplace.visual studio.com/items?item>…) для решения этой проблемы в проекте Deno.
Создатели TypeScript, похоже, по-своему подходят к этому вопросу. Я не думаю, что будет легкое решение этой проблемы, пока CommonJS не будет окончательно заброшен.
Нам нужно немного больше терпения для мудрых, но старых богов программирования. Будем надеяться, что они скоро избавятся от этих устаревших форматов и накажут парней, которые держатся за них и причиняют нам боль.
<h2 id=)[У централизованных репозиториев, таких как npm, есть как плюсы, так и минусы, и именно здесь Deno вызывает много споров. ](marketplace.visual studio.com/items?item>…) для решения этой проблемы в проекте Deno.
Создатели TypeScript, похоже, по-своему подходят к этому вопросу. Я не думаю, что будет легкое решение этой проблемы, пока CommonJS не будет окончательно заброшен.
Нам нужно немного больше терпения для мудрых, но старых богов программирования. Будем надеяться, что они скоро избавятся от этих устаревших форматов и накажут парней, которые держатся за них и причиняют нам боль.
7. Управление пакетами
Подход Deno к управлению пакетами кардинально изменился. Вместо того, чтобы полагаться на централизованные репозитории, управление пакетами Deno отличается децентрализацией. Любой может разместить пакет так же, как он размещает файл любого типа в Интернете.
Централизованные репозитории, такие как npm, имеют как плюсы, так и минусы, и именно здесь Deno вызывает споры.
7.1 Новый механизм управления пакетами Deno
Вас может напугать, насколько легко импортировать пакет.
[import { assertEquals } from "https://deno.land/std/testing/asserts.ts";](https://marketplace.visualstudio.com/items?item>https://marketplace.visualstudio.com/items?itemName=axetroy.vscode-deno</a>)在 Deno 项目中解决这个问题。</p><p>TypeScript 创始人似乎对这个问题有自己的看法。在最终抛弃 CommonJS 之前,我认为这个问题不会有简单的解决方案。</p><p>对于睿智但上了点年纪的编程大神们,我们还需要多一点耐心。但愿他们早日摒弃这些过气的格式,对那些死抓住它们不放而伤害我们的家伙降下惩罚。</p><h2 id=)
Проанализируем изменения ниже.
- Больше никаких централизованных менеджеров пакетов, вместо этого импортируйте модули ECMAScript напрямую из Интернета.
- Больше никакого «волшебного» разбора модулей Node.js. Теперь интуитивно понятный синтаксис упрощает поиск источника.
- Каталога node_modules больше нет. Вместо этого зависимости после загрузки скрываются на вашем жестком диске, и вы их не видите. Если вы хотите обновить кеш и загрузить снова, просто добавьте --reload после команды.
Если вы хотите полагаться на то, что код загружается непосредственно в проект вместо использования глобального кеша, вы можете использовать переменную среды $ DENO_DIR.
7.2 Поиск совместимых сторонних библиотек
В настоящее время существует пользовательская область для сторонних библиотек, совместимых с Deno (deno.land/x/), но дизайн навигации находится в зачаточном состоянии. Например, вы не можете искать по популярности или количеству загрузок. Ожидается, что эта пользовательская область будет либо расширена, либо появятся альтернативные веб-сайты для размещения сторонних модулей, созданных сообществом.
Хотя официальной поддержки обратной совместимости с Node.js нет, все еще существует множество библиотек и приложений, которые можно использовать в Deno. Некоторые работают из коробки, другие требуют некоторой настройки для работы.
тип библиотеки | совместимость |
---|---|
запустить в браузере Использовать синтаксис ESM |
должно работать из коробки Попробуйте Pika CDN (www.pika.dev/cdn) |
запустить в браузере Используйте синтаксис Commonjs. |
Использовать jspm.io (jspm.io/) с использованием синтаксиса ESM для инкапсуляции |
Не запускается в браузере Не использует API Node.js |
Инкапсулировать синтаксис ESM с помощью jspm.io |
Использование API Node.js | Может не сработать, но попробуйте этот официальный уровень совместимости для Node.js (deno.land/std/node/) |
7.3 Установка сторонних модулей
Дено все еще очень новый, и окружающая экология еще не улучшена. На момент написания статьи рекомендую поставить Pika (после стандартной и пользовательской библиотек)www.pika.dev/cdn) в качестве первого выбора для поиска совместимых модулей.
Разработчики Pika предоставили типы TypeScript через ECMAScript для Deno под названием X-TypeScript-Types (Dev.to/Pickup/intro…). Чтобы найти пакет в Pika:
-
пройти первымwww.pika.dev/searchпоиск
-
Найдены совместимые модули; на момент написания этой статьи поиск реакции возвращает:
Package found! However, no web-optimized "module" entry point was found in its package.json manifest.
Однако preact совместим. нажмите, нажмите еще разimport
, затем скопируйте оператор импорта, который появится в вашем коде:
import \* as pkg from 'https://cdn.pika.dev/preact@^10.3.0';
7.4 Помимо package.json
Основная зависимость экосистемы JavaScript заключается в том, чтобы полагаться на package.json. Этот файл расширился до ряда ролей, таких как:
- Сохранить метаданные проекта
- Список зависимостей проекта с версией
- Разделите зависимости на зависимости и devDependencies
- Определить запись программы
- Сохраняет скрипты терминала, связанные с проектом
- Определить тип, который был недавно добавлен для улучшения поддержки модулей ECMAScript.
{
"name": "Project Name", // 元数据
"version": "1.0.0", //元数据
"description": "My application", // 元数据
"type": "module", // 模块功能
"main": "src/mod.ts", // 模块功能
"scripts": {
"build": "npm run \_copy-build-files && rollup -c",
"build-watch": "npm run \_copy-build-files && rollup -cw"
}, // 脚本功能
"license": "gpl-3.0", // 元数据
"devDependencies": {
"@rollup/plugin-typescript": "^3.1.1",
"rollup": "^1.32.1",
"typescript": "^3.8.3"
}, // 版本及分类功能
"dependencies": {
"tplant": "^2.3.3"
} // 版本及分类功能
}
Все эти функции были добавлены с течением времени и теперь являются стандартным способом работы экосистемы JavaScript. Многие люди забывают, что это не официальный стандарт, и вспоминают об этих функциях только при необходимости. Теперь, когда JavaScript так популярен, пришло время подумать о нем с нуля.
Deno пока не является полной заменой package.json, но пока есть некоторые решения.
7.5 Использование deps.ts и URL-адресов для управления версиями
В Deno существует соглашение об управлении версиями пакетов с помощью специального файла deps.ts. В этом файле зависимости будут снова экспортированы. Таким образом, разные модули в приложении могут ссылаться на один и тот же источник.
Вместо того, чтобы сообщать npm, какую версию модуля загрузить, deps.ts помещает версию в URL-адрес:
export { assert } from "https://deno.land/std@v0.39.0/testing/asserts.ts";
export { green, bold } from "https://deno.land/std@v0.39.0/fmt/colors.ts";
Если вы хотите обновить модуль, вы можете изменить URL-адрес в deps.ts. Например, замените @v0.39.0 на @v0.41.0, и новая версия будет использоваться везде. Если вы импортируете напрямую в каждый модульhttps://deno.land/std@v0.39.0/fmt/colors.ts
, то вам придется искать все приложение и заменять по одному.
Существует также риск для безопасности, если предположить, что ранее загруженные модули не будут затронуты более поздними загруженными модулями. По этой же причине есть возможность создать файл блокировки (GitHub.com/Ноланд/…) причина. Это гарантирует, что вновь загруженные модули идентичны первоначально загруженным модулям.
7.6 deno doc
с использованием JSDoc для метаданных
JSDoc был выпущен в 1999 году, 21 год назад. В настоящее время это наиболее используемый и поддерживаемый способ документирования JavaScript и TypeScript. Хотя JSDoc не является официальным веб-стандартом, он является идеальной заменой всех метаданных в package.json.
/\*\*
\* @file Manages the configuration settings for the widget
\* @author Lucio Fulci
\* @copyright 2020 Intervision
\* @license gpl-3.0
\* @version 1.0
\*
Deno имеет встроенную поддержку JSDoc и использует ее для создания системы документации. Хотя метаданные, подобные приведенным выше, в настоящее время не используются,deno doc
Читается описание функции и ее аргументов.
/\*\*
\* Returns a value of (true?) if the rule is to be included
\*
\* @param key Current key name of rule being checked
\* @param val Current value of rule being checked
\*\*/
можно использоватьdeno doc <filename>
для ознакомления с документацией по вашей программе.
deno doc mod.ts
function rulesToRemove(key: string, val: any\[\]): boolean
Returns a value of if the rule is to be included
Если ваша программа размещена в Интернете, вы можете использовать эту онлайн-программу просмотра документации:doc.deno.land/.
8. Встроенные инструменты Deno
Это одна из областей, которая оказывает наибольшее влияние на разработчиков интерфейса. Текущее состояние инструментов JavaScript можно назвать довольно запутанным. Добавьте инструменты TypeScript, и сложность возрастет еще больше.
Сам JavaScript не нужно компилировать, поэтому его можно запускать прямо в браузере. Это позволяет вам быстро узнать, есть ли проблема с вашим кодом. Короче говоря, порог очень низкий, требуется только текстовый редактор и браузер.
К сожалению, эта простота и низкий порог были неосознанно подорваны чем-то, что называется крайним поклонением инструменту. В результате разработка JavaScript превращается в сложный кошмар. Однажды я прошел полный курс по настройке Webpack. Жизнь слишком коротка, чтобы покончить с этой бессмысленной жизнью.
Беспорядок с инструментами заставил многих людей захотеть вернуться к написанию кода вместо того, чтобы возиться с файлами конфигурации или выбирать между различными конкурирующими стандартами. Facebook в Риме (GitHub.com/Facebookexp…) — это проект, созданный для решения этой проблемы. На момент написания этой статьи проект все еще находился в зачаточном состоянии. Хотя этот проект выгоден, Deno должен быть более важным решением.
Сама Deno представляет собой полную экосистему, включая среду выполнения и собственную систему управления модулями/пакетами. Это определяет, что его собственные встроенные инструменты будут иметь более широкий спектр приложений. Давайте взглянем на инструменты, встроенные в Deno 1.0, и на то, как их использовать для уменьшения зависимости от сторонних библиотек и упрощения разработки.
Конечно, Deno пока не может заменить всю цепочку инструментов сборки внешнего интерфейса, но мы должны быть недалеки от этого дня.
8.1 Тестирование
Тестовый бегун начинается сDeno.test()
Функциональная форма встроена в ядро Deno, а библиотека утверждений (Не слишком ленивый/хранить/тестировать…) также входит в стандартную библиотеку. Ваш любимыйassertEquals()
,assertStrictEq()
Немного, плюс несколько менее распространенных утверждений, таких какassertThrowsAsync()
.
На момент написания этой статьи функция тестового покрытия отсутствует. Кроме того, режим мониторинга также требует использования Denon (deno.land/x/denon/) и другие сторонние инструменты для установки.
Чтобы просмотреть полный набор параметров запуска тестов, используйтеdeno test --help
. Хотя он все еще очень ограничен, он может содержать многие функции из некоторых знакомых вам программ, таких как Mocha. Например,--failfast
остановится на первой ошибке, а--filter
Может использоваться для фильтрации тестов для запуска.
1. Использование тест-раннера
Самый простой синтаксисdeno test
. Эта команда запустит все файлы в рабочем каталоге, начиная с_test
или.test
Файл, оканчивающийся на .js, .ts, .jsx или .tsx (например, example_test.ts).
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
Deno.test({
name: "testing example",
fn(): void {
assertEquals("world", "world");
assertEquals({ hello: "world" }, { hello: "world" });
},
});
Если ваш код использует модель DOM, вам необходимо предоставить собственный файл tsconfig.json, содержащийlib: ["dom", "esnext"]
. Подробности описаны ниже.
2. Формат
Форматирование основано на dprint (GitHub.com/D print/День большого рынка…), является заменой библиотеки Prettier, которая воспроизводит все принятые правила Prettier 2.0.
Для форматирования файла вы можете использоватьdeno fmt <files>
или расширение кода Visual Studio (marketplace.visualstudio.com/items?item), который будет представлен позже.
3. Скомпилируйте и упакуйте
Доступ к Deno можно получить через командную строкуdeno bundle
Создает простой пакет, но также предоставляет внутренний API компилятораНе слишком ленивый/физический магазин/руководство. …, поэтому пользователь может управлять своим собственным выводом, иногда настроенным для использования во внешнем интерфейсе. Этот API в настоящее время помечен как нестабильный, поэтому необходимо использовать--unstable
Этикетка.
У Deno есть несколько веб-совместимых API, но они не полны. Если вы хотите скомпилировать внешний интерфейс TypeScript, который ссылается на DOM, вам нужно указать Deno соответствующие типы при компиляции или упаковке. Можно использовать параметры API компилятораlib
.
У Deno есть несколько веб-совместимых API, но они не полны. Если вы хотите скомпилировать внешний интерфейс TypeScript, который ссылается на DOM, вам нужно указать Deno соответствующие типы при компиляции или упаковке. Можно использовать параметры API компилятораlib
.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta />
<title>Document</title>
</head>
<body>
<h1 id="greeter">Replace me</h1>
</body>
</html>
test-dom.ts
let greeter: HTMLElement | null = document.getElementById("greeter")!; // Please forgive the Non-Null Assertion Operator
greeter.innerText = "Hello world!";
compile.ts
const \[errors, emitted\] = await Deno.compile("test-dom.ts", undefined, {
lib: \["dom", "esnext"\], // include "deno.ns" for deno namespace
outDir: "dist",
});
if (errors) {
console.log("There was an error:");
console.error(errors);
} else {
console.log(emitted); // normally we would write the file
}
Ниже результат, напечатанный в терминале.
略
В приведенном выше примере мы скомпилировали файл test-dom.ts, который ссылается на DOM. существуетDeno.compile()
изlib
Параметры переопределяют значения по умолчанию Denolib
значение, поэтому необходимо также добавитьesnext
. Также используйте пространство имен DENO, вы также можете добавитьdeno.ns
.
Это все еще немного экспериментально, но я надеюсьbundle
Команды могут быть разработаны для достижения функциональности, похожей на встряхивание дерева, аналогично Rollup.js.
8.2 Отладка
Dene имеет встроенную отладку, но на момент написания этой статьи расширение Visual Studio Code еще не поддерживает ее. Для отладки необходимо вручную выполнить следующие операции.
-
deno run -A --inspect-brk fileToDebug.ts
(Примечание: предоставьте вашему модулю только минимальные привилегии) -
Открыть в Chrome или Chromium
chrome://inspect
, вы увидите экран, подобный следующему -
Нажмите «проверить», чтобы подключиться и начать отладку кода.
8.3 Мониторинг файлов
В Deno встроено уведомление на основе Rust (GitHub.com/notify-life/вы…) функция мониторинга файлов, черезDeno.watchFs()
использовать. Deno любит открывать мощные API в фоновом режиме, позволяя пользователям реализовывать свой собственный код по своему усмотрению. поэтому нет--watch
тег, вместо этого вам нужно создать свою собственную реализацию или использовать сторонний модуль.
Написание собственного файлового монитора, единственное, что немного сложно, это удаление джиттера. Этот API может запускать множество событий подряд, и мы можем не захотеть выполнять действие несколько раз. Пользователь Github Caesar2011 использовалDate.now()
Решил это с помощью 23 строк кода TypeScript (GitHub.com/Цезарь2011/…).
Существует также более продвинутый инструмент мониторинга файлов Deno под названием Denon (deno.land/x/denon/), эквивалентный nodemon. Если вы хотите отслеживать изменения в рабочей области и повторно запускать тесты, просто выполните следующую команду:
denon test
9. Плагин кода Visual Studio
Плагины Axetroy, опубликованные в Visual Studio Market Place ([](marketplace.visual studio.com/items?item>…) на сегодняшний день является лучшим расширением. После установки создайте файл .vscode/settings.json в каталоге проекта, а затем включите расширение независимо в каждом проекте.
.vscode/settings.json
{
"deno.enable": true,
}
После этого станут доступны все средства кодирования, включая IntelliSense.
10. Резюме
Быстрое развитие javaScript Ecosystem имеет свои преимущества и недостатки. На положительной стороне там никогда не было столько высококачественных инструментов. На негативной стороне бесконечный наплыв каркасов и библиотек можно легко заставить разработчиков жалуться и даже сомневаюсь в их жизни.
Deno успешно избегает многих недостатков разработки на JavaScript, и это лишь некоторые из них.
- Используя веб-стандарты, Deno делает свой API более перспективным. В то же время это также дает разработчикам большую уверенность в том, что им не нужно тратить время на изучение вещей, которые быстро устаревают.
- Улучшение JavaScript с помощью TypeScript при одновременном снятии нагрузки на компиляцию обеспечивает более тесную интеграцию.
- Встроенные инструменты означают, что стандартные функции доступны сразу после установки, поэтому вам не нужно тратить время на поиск.
- Децентрализованное управление пакетами освобождает пользователей от npm, а модульная система ECMAScript также впечатляет по сравнению со старым CommonJS.
Не заменив полностью Node.js, Deno стал отличной средой программирования для повседневного использования.