1. Введение
Что такое Дено? Какое отношение Deno имеет к Node? Какое отношение ко мне имеет Дено?
Deno выпустит 1.0 13 мая 2020 г., если у вас все еще есть вышеуказанные сомнения, вы можете пройти со мной.Deno 1.0: What you need to knowИзучите основы Deno вместе с этой статьей.
Надеюсь, вы будете думать вопросами. Глядя на сегодняшний день, в ближайшие 10 лет возникнет ситуация, когда официальная экология Deno вырастет, полностью заменив Node и повлияв на экологию Сети? Этот результат мышления повлияет на ваш будущий карьерный рост, вам нужно научиться думать самостоятельно и нести ответственность за этот результат мышления.
2 Введение и интенсивное чтение
Автором Deno является Райан Даль, вдохновитель Nodejs, который однажды сказал:10 вещей, о которых я сожалею о Nodejs. Поэтому открывается новая яма, но Deno не позиционируется как замена Nodejs.С точки зрения общих функций Deno имеет большие амбиции.По моим предположениям, он хочет заменить нынешний устаревший фронтенд и бэкенд. модели конечной разработки.Позвольте Deno объединить весь процесс фронтенд- и бэкенд-разработки.
Nodejs написан на C++, в то время как Deno написан на Rust и выбираетTokioЭта среда асинхронного программирования использует механизм V8 для разбора Javascript и имеет встроенный анализ Ts.
Установить
Deno поддерживает следующие способы установки:
Shell:
curl -fsSL https://deno.land/x/install/install.sh | sh
PowerShell:
iwr https://deno.land/x/install/install.ps1 -useb | iex
Homebrew:
brew install deno
Chocolatey:
choco install deno
Скрипт выполняется какdeno run
, которую можно сравнить сnode
, но с другими функциями и поддержкой удаленных файлов, на самом деле удаленные зависимости — главная фича Deno, и это тоже спорное место:
deno run https://deno.land/std/examples/welcome.ts
Позволяет загружать ресурсы с удаленными скриптами в ts-файлах, о которых будет сказано ниже:
import { serve } from "https://deno.land/std@v0.42.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
req.respond({ body: "Hello World\n" });
}
безопасность
DENO по умолчанию безопасен, что отражено в отсутствие среды, доступа к сети, доступа к файлам и записи и записи, а также возможность запуска дочерних процессов по умолчанию. Поэтому, если вы напрямую запускаете файл, который зависит от разрешений, он сообщит об ошибке:
deno run file-needing-to-run-a-subprocess.ts
# error: Uncaught PermissionDenied: access to run a subprocess, run again with the --allow-run flag
Выполнение разрешений можно разрешить через параметры, есть--allow-read
,--allow-write
,--allow-net
Ждать:
deno --allow-read=/etc
выше указано/etc
Файлы в папке имеют разрешение на чтение.
В дополнение к непосредственному добавлению параметров и вызову сценариев Bash вы также можете использовать Make для запуска или использовать аналогичныеdrakeзапускать.
или использоватьdeno install
команда, которая превращает скрипт в ярлык:
deno install --allow-net --allow-read -n serve https://deno.land/std/http/file_server.ts
-n
выражать--name
, вы можете переименовать скрипт, как в приведенном выше примере,serve
команда эквивалентнаdeno run --allow-net --allow-read https://deno.land/std/http/file_server.ts
.
стандартная библиотека
Deno очень характерен для стандартной библиотеки и предоставляет официальные версии для общих функций, чтобы обеспечить удобство использования и стабильность. В исходном тексте перечислены некоторые сравнения с трехсторонней библиотекой Npm:
Deno Module | Description | npm | Equivalents |
---|---|---|---|
colors | Adds color to the terminal | chalk, kleur, and colors | |
datetime | Helps working with the JavaScript Date object | ||
encoding | Adds support for external data scructures like base32, binary, csv, toml and yaml | ||
flags | Helps working with command line arguments | minimist | |
fs | Helps with manipulation of the file system | ||
http | Allows serving local files over HTTP | http-server | |
log | Used for creating logs | winston | |
testing | For unit testing assertion and benchmarking | chai | |
uuid | UUID generation | uuid | |
ws | Helps with creating WebSocket client/server | ws |
С этой точки зрения, Deno является одновременно и операционной средой, и базовой экологией, что снимает трудности выбора в экологии Npm.Этот вопрос нужно рассматривать диалектически: интеграция официальных пакетов необходима для модулей с определенными функциями. , стабильность базовой библиотеки повышена, но в экосистеме Deno есть и сторонняя библиотека, и по сути, сторонняя библиотека и официальная библиотека не имеют функциональных барьеров, т.к. коды реализации схожи, единственное отличие кто может постоять за его стабильность, предполагая Microsoft В то же время с Deno официальная библиотека, основанная на экологии Npm и экологии Deno, гарантированно будет поддерживаться постоянно.Кому вы верите больше? Имеет ли судья преимущество, зависит от его собственной силы.
Встроенный машинописный текст
Deno имеет встроенную поддержку TS, так что нет необходимостиts-node
мы можем использоватьdeno run test.ts
Запустите файл TypeScript. Стоит отметить, что Deno также использует движок Typescript, чтобы разобрать его на Js и потом передать на разбор движку V8, так что изменений по сути не много, но экология Deno будет более стандартизирована.
За счет встроенной поддержки ТС естественно писать не надоtsconfig.json
Настроено, но вы все еще можете настроить его:
deno run -c tsconfig.json [file-to-run.ts]
Также Deno по умолчанию включает строгий режим TS, так что, видя это, можно считать, что Deno — это работающая среда, рожденная для построения качественной идеальной библиотеки, она основана на существующей экологии, но в нее встроено больше выбор технологии, который согласуется сromeОчень похоже, но сделано более тщательно.
На самом деле, с точки зрения реализации, мы также можем писать на основе экологии Javascript.deno run test.ts
Подобный движок работает только на JS, и для компиляции может быть выбран Webpack, но сам Deno реализован на основе Rust и заново реализован набор стандартов загрузки модулей.Можно сказать, что стандартная спецификация W3C была переинтерпретирована из более низкий уровень. , чтобы решить различные болевые точки экосистемы Javascript.
Поддержка веб-стандартов
Deno также поддерживает стандартные спецификации W3C, поэтому такие вещи, какfetch
,setTimeout
и другие API могут использоваться напрямую.Если вы пишете код в соответствии с функциями, поддерживаемыми Deno, вы можете обеспечить кроссплатформенную работу на трех платформах Deno, Node и Web.
Хотя до полной реализации всех стандартных спецификаций W3C еще далеко, мы видим решимость быть совместимыми с Deno.
ESModule
Модульность является изюминкой Deno, Deno использует официальную спецификацию ESModule, но ссылочный путь должен иметь суффикс:
import * as log from "https://deno.land/std/log/mod.ts";
import { outputToConsole } from "./view.ts";
Deno не нужно объявлять зависимости. Ссылочный путь кода — это объявление зависимости, которое будет включать полный путь и суффикс файла. Он также поддерживает сетевые ресурсы и может избавиться от режима централизованного управления пакетами NPM, потому что этот путь может любой сетевой адрес.
управление пакетами
дляimport * as log from "https://deno.land/std/log/mod.ts";
Эту строку кода Deno загрузит в папку кеша, пользователь не будет воспринимать существование этой папки и этого процесса, то есть в среде Deno такого нет.node_modules
из.
также черезdeno --reload
способ принудительного обновления кеша.
Но здесь мы также должны смотреть на "децентрализацию Deno" диалектически.Хотя сетевой источник цитируется, это вызовет следующие проблемы:
- На самом деле есть «node_modules», которые все еще существуют, просто они не видны пользователю.
- Когда скорость загрузки по сети введена в действие, первый запуск все еще очень медленный.
- Нет блокировки в обычном режиме, должен сотрудничать
deps.ts
использования, о чем будет сказано позже.
Даже у npm, которого называют «централизованным злодеем», есть децентрализованная сторона, потому что npm поддерживает приватизированное развертывание, а скорость и стабильность могут контролироваться самой компанией, а с точки зрения стабильности у npm есть подавляющее преимущество.
трехсторонняя библиотека
У Deno также есть сторонняя библиотечная экосистема, на данный момент существует в общей сложности221 трехсторонняя библиотека.
Поскольку Deno использует сетевые ресурсы, мы можем использоватьPikaПредоставленная служба CDN напрямую ссылается на пакет сетевых ресурсов:
import * as pkg from "https://cdn.pika.dev/preact@^10.3.0";
Хотя это выглядит очень легковесным, компании по-прежнему необходимо построить «Pika» для обеспечения стабильности, а также для глобального кэширования CDN и другой работы.
до свидания package.json
Информация о пакетах в экосистеме npm хранится вpackage.json
, включая, но не ограничиваясь следующим:
- Метаинформация проекта.
- Зависимости проекта и номера версий.
- Зависимости также классифицируются, например
dependencies
,devDependencies
четноеpeerDependencies
. - отметить вход,
main
а такжеmodule
, а также для ТСtypes
а такжеtypings
, лесаbin
и т.п. - нпм скрипты.
Благодаря постоянному обновлению стандартов,package.json
Информация уже сильно раздута.
Для Дено используйтеdeps.ts
Централизованно управлять зависимостями:
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";
deps.ts
Это обычный файл, который просто точно описывает зависимости проекта, чтобы другие места могли ссылаться на него.assert
, ты можешь написать:
// import { assert } from "https://deno.land/std@v0.39.0/testing/asserts.ts";
import { assert } from "./deps.ts";
Если вам нужно заблокировать зависимости, вы можете передатьdeno --lock=lock.json
способ объявить.
deno doc
deno doc <filename>
Команда может генерировать документы в соответствии с правилами JS Doc, а также поддерживает синтаксис TS, например следующий код:
/** Asynchronously fulfill a response with a file from the local file
* system. */
export async function send(
{ request, response }: Context,
path: string,
options: SendOptions = { root: "" }
): Promise<string | undefined> {
// ...
}
Сгенерированные документы выглядят следующим образом:
function send(_: Context, path: string, options: SendOptions): Promise<string | undefined>
Asynchronously fulfill a response with a file from the local file system.
Сама документация deno генерируется с помощью этой команды, вы можетеДоступ к официальной документацииОцените эффект от использования.
Встроенный набор инструментов
Цепочка интерфейсных инструментов Javascript довольно запутанна.Хотя такие фреймворки, как Umi, были готовы к использованию в отрасли, первоначальная цель дизайна Javascript заключалась в том, чтобы его можно было использовать непосредственно в браузерах, включая модульность браузеров, которые не полагаться на инструменты сборки.Поддержка, обречено, что Webpack будет устранен в будущем.
Deno решает эту проблему, создавая набор цепочек инструментов, в том числе:
- тест: предоставить
deno test
Команда иDeno.test()
Тестовая функция. - Форматирование: ПредусмотреноПлагин vscode.
- скомпилировать: предоставить
deno bundle
Заказ.
Однако стоит отметить, что в самой важной ссылке компиляцииdeno bundle
Возможности, предоставляемые в настоящее время, относительно недостаточны, например, Tree Shaking еще не поддерживается.
Использование Rust и других языков для повышения эффективности конструирования — это то, что пытается сделать отрасль.Например, @陈成 на основеesbuildСделанный@umijs/plugin-esbuildПлагин используется для ускорения сборки Umi, но использует только функцию минификатора, чтобы предотвратить несоответствие производственных сборок правилам Webpack по умолчанию.
То же самое верно и для deno.В настоящее время нет доказательств того, что результат сборки deno может быть идеально адаптирован к среде webpack, поэтому, пожалуйста, не думайте, что выпуск версии 1.0 deno означает, что его можно использовать в производственная среда.
3 Резюме
Как сказано в конце оригинального текста, хотя Deno собирается выпустить версию 1.0, она все еще не может полностью заменить Nodejs.Причиной этого в основном является историческая стоимость совместимости, то есть полная поддержка всей экосистемы Node не только вопрос дизайна, но и физическая задача.Нужно покорять один за другим возвышенности.
Точно так же поддержка Deno для Интернета также обновляется, но ее по-прежнему нельзя использовать в производственной среде.Помимо постепенного улучшения официальной и сторонней экологии,deno bundle
Отсутствие возможности Tree Shaking и невозможность гарантировать, что продукты сборки точно такие же, как текущий Webpack, что приведет к очень высоким затратам на миграцию для крупномасштабных приложений, требующих чрезвычайно высокой стабильности.
Наиболее заметным изменением является модульная часть: полагаться на полную децентрализацию — очень хороший дизайн в долгосрочной перспективе, но инфраструктура и экология должны быть на идеальном уровне.
Наконец, давайте подумаем, будет ли Deno стрелять с точки зрения пророка:
Первоначальное намерение Deno состояло в том, чтобы стать лучшим Node, но, к сожалению, для такого уровня экологических базовых инструментов создать новый и снова стать популярным так же сложно, как и создать новую Alibaba и заменить текущую сложность Alibaba. То есть, делая одно и то же в разные моменты времени, даже если последний может извлечь урок, существует высокая вероятность того, что он не сможет повторить предыдущий успешный маршрут.
От функции Deno он решает многие болевые точки Node, в том числе децентрализованное управление, что означает облачную разработку, но в 2020 году развита облачная разработка на базе Nodejs и Webpack.Честно говоря, нет Deno.space. С функциональной точки зрения в начале было сказано, что Deno парсит Javascript на базе V8.Революционного улучшения производительности и функциональности нет, а совершить прорыв в технологии практически невозможно.
Идея Deno действительно более продвинутая, чем Node, но нельзя сказать, что она в десять раз лучше Node, поэтому она не может поколебать экологию Node, даже автору Node, возможно, не под силу.
Однако то, что я сказал выше, может быть неверным.
Адрес обсуждения:Интенсивное чтение «Что вам нужно знать о Deno 1.0» · Выпуск № 248 · dt-fe/weekly
Если вы хотите принять участие в обсуждении, пожалуйста,кликните сюда, с новыми темами каждую неделю, выходящими по выходным или понедельникам. Интерфейс интенсивного чтения — поможет вам отфильтровать надежный контент.
Сфокусируйся наАккаунт WeChat для интенсивного чтения в интерфейсе
Заявление об авторских правах: Бесплатная перепечатка - некоммерческая - не производная - сохранить авторство (Лицензия Creative Commons 3.0)