Что такое Дено? Заменит ли он Node.js?

внешний интерфейс deno
Что такое Дено? Заменит ли он Node.js?

Оригинальная ссылка:blog.bit SRC.IO/что-есть-шо…

Denoдаnode.jsавторRyan Dahlнаписано, значит ли это, чтоDenoфактическиNode.jsальтернативы, должны ли мы начать планировать спринты по рефакторингу? Если вы хотите узнать больше, пожалуйста, прочитайте ниже.

В 2018 годуRyanвыступил с речью, в которой представил то, что, по его мнению, имело значениеNode.jsдесять вопросов. В конце своего выступления он представилDenoвуаль. тогдаDenoЭто всего лишь небольшой проект, который он строит, возможно, известный какNode.jsверсия v2, вNode.jsулучшенный и более безопасный.

Вот видео-адрес выступления, ты лучше посмотри.

Через два года, 13 мая 2020 года, состоялся официальный релизDenoВерсия 1.0. совершенно новыйJavaScriptПлатформа разработки, работающая на сервере. В отличие отNode.jsиспользуетсяC++развитие языка,DenoНижняя часть основана наTokioПлатформаJavaScriptтребуется асинхронное время выполнения)Rustязык, который до сих пор работает наV8на двигателе.

какие новые знания

Мы говорим не только о текущемNode.jsполностью совместимый новыйJavaScriptСреда выполнения, наоборот,RyanсуществуетDenoдобавил некоторые изNode.jsчего не хватает в .

Интеграция безопасности

по умолчанию,Node.jsПозволяет вам получить доступ ко всему, то есть вы можете читать и писать в файловую систему, отправлять запросы на передачу, получать доступ к переменным среды и многое другое. Для разработчика наличие такого доступа, безусловно, полезно, но может быть угрозой безопасности, если вы не будете осторожны при написании кода.

следовательно,DenoДоступ к различным функциям безопасности можно включить или отключить с помощью параметров командной строки. Если вам нужен скрипт для доступа/etcпапку, вы можете сделать следующее:

deno --allow-read=/etc myscript.ts

Таким образом, ваш код может читать что угодно из этой папки, и он выдаст полное исключение без разрешения. Это похоже на то, как другие платформы обеспечивают безопасность. Что, если выAndroidПользователи, вы, должно быть, сталкивались со многими приложениями, которые просили вас разрешить им читать контакты, телефонные звонки, папки и т. д., и это похоже. Введя эти параметры в командной строке, где выполняется сценарий, можно предоставить разрешения, требуемые кодом.

Более полная стандартная библиотека

с первогоNode.jsНачиная с версии,JavaScriptначал улучшать свою стандартную библиотеку. Но по сравнению с другими языками ему еще предстоит пройти долгий путь.Denoтакже работает над улучшением этого и утверждает, что имеет очень полную стандартную библиотеку, которая позволяет разработчикам использовать официальные инструменты для выполнения основных задач, только сложные задачи требуют использования внешних библиотек (таких какNPM).

По сути,DenoПредоставляет такие инструменты, как добавление цвета к тексту терминала, использование внешних структур данных (таких как двоичные,csv,yamlи др.), поколениеUUIDдаже написатьwebsocketи т.п. готовый метод. Также доступны некоторые другие более простые модули, такие как доступ к файловой системе, функции преобразования даты,httpсопутствующие функции и т.д.

Интеграция машинописного текста

Вы правильно прочитали, если выTypeScriptлюбовники, тогдаDenoОн может удовлетворить ваши потребности сам по себе, и нет необходимости вводить внешние библиотеки.По умолчанию вы можетеTypescriptПеревести вJavaScript.

Хотя по умолчаниюDenoсделает преобразование само по себе, но вы можете использовать свой собственныйtsconfig.jsonфайл, чтобы переопределить конфигурацию по умолчанию:

deno run -c tsconfig.json [your-script.ts]

Конфигурация по умолчанию находится в строгом режиме, поэтому любое несоответствующее кодирование немедленно предупреждается.

Больше не нужны папки NPM или node_modules

существуетNode.jsВ , каждый модуль имеет неразрывные зависимости со своими модулями-предками. Это слишком раздуто? Это неправильный способ распределения управляемых зависимостей? это абсолютноNode.jsодин из самых спорных аспектов, поэтомуDenoРешил отказаться от него совсем.

Так,DenoКак обрабатываются зависимости? Это позволяет импортировать модули из любого места. Другими словами, вы можете просто сделать:

import * as log from "https://deno.land/std/log/mod.ts";

С этого момента больше нет необходимости иметь собственный централизованный репозиторий, но вы должны делать это осторожно, так как импорт модулей из сторонних источников, которые вы не можете контролировать, подвергает вас опасности.

На самом деле, нам больше не нужноpackage.json, теперь, позвонив вdeps.tsУправление зависимостями может быть достигнуто путем сохранения списка модулей и их соответствующих URL-адресов в файле. Но как насчет контроля версий? Я знаю, ты спросишь. ты сможешьURLУказанный выше вариант пакета хоть и не очень навороченный, но работает.

Простой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";

Это повторно экспортирует модуль, если вы хотите изменить его версию, на которую ссылаются, просто изменитеURLВот и все.

Кстати, после первого выполнения кода импортированные модули кэшируются до вашего следующего перезапуска.

что еще

DenoТакже включает в себя другие функции, такие как большие инструменты из коробки, в том числеtest runner, debugger, file watcherЖдать. Но некоторые - это то, что он обеспечиваетAPI, вам нужно написать свою собственную логику поверх них, чтобы использовать их.

кDeno.watchFsкоторый предоставилfile watcher APIНапример, если вы ищетеnodemonАналогичное решение, вы должны сами написать код для реализации. Следующие 23 строки кода являются решением этой проблемы:

function startProcess(args: string[] = []): Deno.Process {
  return Deno.run({ cmd: ['deno', ...args] });
}

const throttle = 500;
let app: Deno.Process = startProcess(Deno.args);
let timeout: number|null = null;

function runApp() {
  app && app.close();
  app = startProcess(Deno.args);
}

for await (const event of Deno.watchFs('.')) {
  if (event.kind !== "access") {
    if (timeout) clearTimeout(timeout);
    timeout = setTimeout(runApp, throttle);
  }
}

Заменит ли он Node.js?

Некоторые из нас давноNode.jsЯ использую его со дня выхода 0.10 и в продакшене! Правда может звучать пугающе, но мы делаем это, потому что ничто не может заменить ее.PHP,PythonчетноеRuby(не говоря уж оJavaили.NET) не совместимы сJavaScriptи модель асинхронного ввода/выводаNode.jsНаравне. С годами,Node(и JavaScript) эволюционировали, чтобы соответствовать отраслевым требованиям. Это идеально? Но, как и все в жизни, языки программирования не идеальны.

DenoТеперь это просто продукт с итерациями разработки всего за 2 года. Он не был опробован в производственной среде, и для него не были написаны исключительные тестовые примеры, чтобы увидеть, как он справляется с пограничными случаями. Пока это не будет сделано, он не будет доступен ранним пользователям. Возможно, через год мы увидим, как некоторые компании начнут делиться своим опытом, как они решили свои новоявленные недостатки и т. д. В конечном счете, сообщество настроит его, чтобы сделать его более полезным и доступным. он заменитNode.js? Подождем - увидим.