Оригинальная ссылка: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
? Подождем - увидим.