Безопасность, как под капотом, оконный объект и поддержка TypeScript

Deno - это новый Node.js? Или это просто хорошая альтернатива? В этой статье мы рассмотрим некоторые важные отличия и особенности - получайте удовольствие!

Основные различия между Node.js и Deno:

  • Deno использует Rust под капотом, а также двигатель V8, как и Node.js.
  • Deno поддерживает TypeScript из коробки. Он также может без проблем работать с JavaScript прямо из коробки.
  • Deno не поддерживает пакеты NPM и не использует каталог node_modules. Библиотеки импортируются через URL.
  • Deno использует систему разрешений для выполнения кода.
  • Объект окна поддерживается в Deno, хотя мы пишем внутренний код.

История и история Deno

Теперь уже рассматривается некоторыми как следующая большая вещь, пришедшая на смену Node.js, оба имеют одно происхождение: Райан Даль

Даль работал над проектом Node с 2009 года, но через несколько лет отказался от него. В 2018 году он выступил с докладом 10 вещей, о которых я сожалею о Node.js, в котором также анонсировал Deno - новую среду выполнения JavaScript и TypeScript.

Забавный факт: «Deno» на самом деле является анаграммой от «Node».

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

Кажется, ответ будет «Нет.», как Даль представил в другом докладе, который вы можете найти по ссылке.

Как говорит сам Даль в своем выступлении, Дено все еще новичок. В настоящее время точнее в версии 1.0.0. Node, с другой стороны, уже немного старше - и, по сути, оба имеют одну и ту же цель.

Это среда выполнения JavaScript, поэтому мы можем использовать JS вне браузера, например для веб-серверов.
Но как будут выглядеть отношения между Deno и Node через несколько лет, вряд ли кто-то может сказать.

Deno и Node под капотом

Node.js основан на C ++ и использует движок V8 для выполнения кода JavaScript.
Сам движок V8 был первоначально разработан для Google Chrome для очень быстрого выполнения JavaScript в браузере. Между тем даже новая версия Microsoft Edge основана на V8.

Deno также полагается на движок V8, но вместо C ++ Deno также основан на Rust - языке программирования, который должен обеспечивать такую ​​же хорошую производительность, как C ++, но также уделяет особое внимание безопасности: ошибки доступа к памяти или переполнение буфера должны быть избегали.

И безопасность - это одно. Общая критика Node.js заключается в том, что после запуска приложения узла оно может легко получить доступ, например, к файловой системе или сети.

Deno хочет избежать этого, требуя, чтобы человек, запускающий приложение Deno, сначала разрешил то, что Deno хочет делать.

Хорошим примером этого является следующий код TS, который мы находим в качестве примера для начала работы на официальном сайте Deno:

import { serve } from “https://deno.land/[email protected]/http/server.ts";
const s = serve({ port: 8000 });
for await (const req of s) {
  req.respond({ body: “Hello World\n” });
}

Как вы, наверное, уже заметили, это очень простой веб-сервер, и нам нужно будет выполнить все, как показано ниже:

deno run app.ts 

Но здесь вмешиваются меры безопасности Deno, доступ к сети еще не разрешен нами, поэтому появляется следующее сообщение:

Чтобы нашему приложению был разрешен доступ к сети, мы должны сначала дать ему авторизацию:

deno run --allow-net app.ts 

Теперь наш маленький веб-сервер работает успешно, но приятно то, что мы только одобрили сеть. Приложение по-прежнему не может получить доступ к файловой системе просто так, нам придется сначала разрешить это вручную.

Прощай, NPM, привет, импорт ES6

Еще одна вещь, связанная с безопасностью нашего приложения, - это NPM: не только использование NPM часто приводит к огромным папкам node_modules, но также существует проблема с узлом и безопасностью: если мы используем NPM для установки пакета для наше приложение узла, теоретически оно может делать что-то еще втихаря.
В прошлом был скандал с пакетами NPM, которые, например, шпионили за пользовательскими данными.

Deno вообще не полагается на NPM - вместо этого мы импортируем наши библиотеки через URL-адрес, как уже показано в примере кода выше.

import { serve } from “https://deno.land/[email protected]/http/server.ts";

Библиотека, которую мы хотим использовать, загружается вместе с ней при первом запуске, а затем кэшируется:

Это можно увидеть, когда мы просто копируем наш код для нашего веб-сервера, сохраняем его в совершенно другом месте на нашем сервере или ПК и запускаем его снова. Библиотеки перезагружать не нужно.

Если вы хотите узнать больше об опасностях NPM:



Объект окна - также вне браузера

Объект окна - это родительский объект в браузере, от которого происходят некоторые из наиболее важных функций JavaScript.

Один из них, например, выборка. Нативной альтернативе таким библиотекам, как Axios, к сожалению, нет места в Node.js - там вам нужно найти решение с библиотеками - но не в Deno.

Поскольку в Deno объект окна доступен, как вы можете видеть здесь в документации: https://deno.land/typedoc/interfaces/window.html
И там, где находится окно, мы также можем использовать выборку, точно так же, как в браузере.

Давайте просто попробуем это, и вы увидите, что вы можете запустить следующий код в браузере, а также в приложении Deno:

fetch(“https://jsonplaceholder.typicode.com/todos/1")
  .then((response) => response.json())
  .then((json) => console.log(json));

Если вы хотите узнать больше об объекте окна, посмотрите это:



Поддержка TypeScript из коробки

TypeScript - это, конечно, дело вкуса, многие отмечают его, но некоторые также считают его ненужным. Но что я могу сказать, так это то, что обе стороны могут быть довольны Deno - потому что Deno предлагает поддержку TypeScript прямо из коробки, но, конечно же, он также поддерживает классический JavaScript.

Вы можете убедиться в этом по тому факту, что вы можете легко написать код на обоих языках, сохранить его как .ts или .js и просто выполнить его как обычно с помощью обозначает запуск. На мой взгляд, это не кардинальное изменение правил игры по сравнению с Node.js, потому что там вы можете легко получить поддержку TypeScript, но это определенно крутая вещь.

Спасибо за внимание! Хотите подписаться на Medium.com и одновременно поддержать меня? Если ваш ответ утвердительный, обязательно проверьте это:

Https://louispetrik.medium.com/membership

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

Заранее благодарю! :)

Обновление от ноября 2020 г.



Присоединяйтесь к моей рассылке, чтобы получать все, что вас интересует

Примечание от Plain English

Вы знали, что мы запустили канал на YouTube? Каждое видео, которое мы снимаем, будет направлено на то, чтобы научить вас чему-то новому. Проверьте нас, нажав здесь, и обязательно подпишитесь на канал 😎