Какво е Дено? По-добър Node.js

Ако харесвате Node.js, но не и неговия мениджър на пакети npm, или искате по-сигурна среда за изпълнение на JavaScript от Node.js, може да намерите новия проект с отворен код Deno от интерес (думата Deno е анаграма на Node). От друга страна, ако използвате Node.js в производството, тук няма какво да се види, продължете - Deno все още е „в процес на разработка“.

Deno е програма за стартиране на JavaScript и TypeScript код извън браузъра. Това е най-скорошното усилие, ръководено от Райън Дал, който основава проекта Node.js през 2009 г., и е опит да се преосмисли Node.js в светлината на напредъка в JavaScript от 2009 г., включително компилатора TypeScript. Подобно на Node.js, Deno по същество е черупка около JavaScript V8 на Google V8, въпреки че за разлика от Node.js включва компилатора TypeScript в изпълнимия си образ.

Deno и усъвършенстван JavaScript

През 2009 г. на JavaScript липсваха няколко функции, които биха били полезни за Node.js, според Дал. Няколко от тях са добавени към JavaScript през годините като част от стандарта ECMAScript (ES), а TypeScript е разгледал още няколко.

JavaScript е имал събития и обратно извикване по същество завинаги, но те могат да доведат до доста сложен код, особено когато искате да свържете асинхронни действия. Обещанията правят синтаксиса малко по-четлив. A promiseе върнат обект, представляващ евентуално завършване или неуспех на асинхронна операция, към която можете да прикачите обратно извикване, за разлика от предаването на обратни повиквания във функция. Декларирането на функция asyncдопълнително опростява синтаксиса, позволявайки ви да използвате awaitв рамките на функцията, за да направите пауза по неблокиращ начин, докато обещанието се уреди.

Когато беше създаден Node.js, де факто стандартът за JavaScript модулите беше CommonJS, което npm поддържа. Оттогава комисията ECMAScript официално благослови различен стандарт, ES Modules, който поддържа jspm. Deno поддържа ES модули.

Набраните масиви са ES6 API за обработка на двоични данни, нещо, което Node.js би могъл да използва; липсата на поддръжка на двоични данни доведе до някои проблеми с дизайна на Node.js. Deno използва типизирани масиви, когато трябва да манипулира необработени двоични данни. Node.js вече поддържа въведени масиви за потребителски код.

TypeScript е типизиран супер набор от JavaScript, който се компилира в обикновен JavaScript (ES3 или по-нова версия; той може да се конфигурира). TypeScript добавя незадължителни типове, класове и модули към JavaScript и поддържа инструменти за широкомащабни JavaScript приложения. (Андерс Хейлсбърг го нарича „JavaScript, който се мащабира.“) Както бе споменато по-рано, Deno съдържа изображение на компилатора TypeScript като част от неговото време на изпълнение. Ако предадете Deno на TypeScript файл, той първо ще го компилира в JavaScript и след това ще го предаде на V8 двигателя.

Недостатъци в дизайна на Node.js

Според Дал, който в края на краищата е проектирал Node.js и Deno, Node.js страда от три основни проблема с дизайна:

  • лошо проектирана модулна система, с централизирано разпределение;
  • много наследени API, които трябва да се поддържат;
  • и липса на сигурност.

Дено решава и трите проблема. 

Deno сигурно изпълнение

Начинът, по който Deno подобрява защитата над Node.js е прост: По подразбиране Deno няма да позволи на програмата да има достъп до диск, мрежа, подпроцеси или променливи на околната среда. Когато трябва да разрешите някое от тях, можете да се включите с флага на командния ред, който може да бъде толкова подробен, колкото искате, например --allow-read=/tmpили --allow-net=google.com. Друго подобрение на сигурността в Deno е, че той винаги умира при неуловени грешки, за разлика от Node.js, което ще позволи изпълнението да продължи след неуловена грешка, с резултати, които може да не са предвидими.

Deno модули

В Node.js зареждате модули CommonJS с помощта на requireключовата дума и всички, както стандартни, така и трети страни, имплицитно идват от npmjs.com. В Deno зареждате ES модули с помощта на importключовата дума и изрично посочвате URL адреса. Например:

импортиране * като дневник от "//deno.land/std/log/mod.ts";

Deno модулите могат да бъдат хоствани навсякъде - няма централизирано хранилище за модули на трети страни. Освен това модулите винаги се кешират и компилират локално и не се актуализират, освен ако изрично не поискате опресняване. Следователно трябва да можете да стартирате програми на Deno, които вече са на вашия лаптоп, стига всички импорти да са разрешени веднъж, дори ако сте в самолет без връзка.

Deno има централизирана колекция от стандартни модули, които нямат външни зависимости и се преглеждат от основния екип на Deno; той живее на сървъра deno.land. Колекцията модули deno_std е свободен порт на стандартната библиотека на Go.

Има малко история зад този избор на модел за библиотеката. Дал написа своя прототип на Deno предимно на езика Go, но откри потенциални конфликти между събирачите на боклук в Go и V8. След това той и неговите сътрудници пренаписаха правилно Deno с V8, Rust и Rust asynchronous I / O package Tokio. Те внедриха стандартната библиотека Deno в TypeScript.

Към този момент Deno е разумна и забавна среда за изграждане на малки частни проекти за скриптове в TypeScript. Според Дал Дено никога няма наистина да повлияе на успеха на Node.js. Въпреки това, след като Deno достигне версия 1.0, той може да се превърне в жизнеспособен избор за изграждане на по-големи проекти.