Node.js може да е добре установен, но не пренебрегвайте Deno, подобна рамка от същия разработчик.
Node.js е дълготрайна рамка, която ви позволява да пишете код от страна на сървъра в JavaScript. Първоначално пусната през 2009 г., рамката отбеляза значителен растеж и експлозия в използването през последните години.
Deno има разлики в стила на форматиране, синтаксиса на импортиране и управлението на пакети, но един и същ инженер изгради тези конкурентни рамки на един и същи двигател.
Днес Deno съществува достатъчно дълго, за да спечели място в стековете на много разработчици. Ако искате да стартирате нов JavaScript проект, може да се чудите кой е правилният избор.
Характеристики на възел и дено
Близо девет години след пускането на Node, неговият разработчик Райън Дал обяви нов проект: Deno. Докато Node някога беше единствената опция за JavaScript от страна на сървъра, Deno ни даде алтернатива.
Node.js и Deno са доста сходни по много начини. По-голямата част от разликите между двете се намират под капака. Когато Node работи на V8 JavaScript двигател, Deno работи над персонализиран двигател, изграден в Rust със силен фокус върху производителността.
Повечето от основните разлики между двата се основават на това кои функции поддържа всеки език. Модули, linting, typescript и управление на пакети се обработват доста по различен начин между двете.
Импортиране на модули: CommonJS срещу. ES
Node.js използва CommonJS модули по подразбиране със синтаксиса на require(). Node ви позволява да промените това, като промените конфигурационните си файлове, за да използвате ECMAScript модули със синтаксиса import(), вместо това, ако искат.
// Това е валидно импортиране на модул CommonJS в Node.js
вар _ = изискват("лодаш");
// Това е валидно импортиране на ECMAScript модул в Node.js
импортиране _ от"lodash";
Има известна ограничена оперативна съвместимост между двата типа зареждане на ES модули, като някои ECMAScript модули могат да се включат чрез синтаксиса на require(). Всеки тип импортиране обработва модулите малко по-различно, но всеки от тях ще работи в повечето случаи.
Това ви позволява да изберете предпочитаната от вас методология за включване на външни модули при създаване на проект.
Deno използва различен подход, когато става въпрос за включване на външни модули в проект. Deno използва синтаксиса include() за всички модули, но за разлика от импортирането на Node, модулите, импортирани в Deno, могат да идват от всяко място. Тези местоположения могат дори да включват отдалечени мрежи за доставка на съдържание (CDN).
// Това е валидно изявление за импортиране в Deno
импортиране" https://deno.land/x/[email protected]/dist/lodash.js";
Това ви позволява да импортирате зависимости от всяко място, локално или отдалечено, предлагайки много по-голяма гъвкавост. Ако предпочитате да работите с традиционния изискващ синтаксис от Node.js, можете да напишете своя собствена функция за изискване на polyfill в Deno като заобиколно решение.
Поддръжка за TypeScript код
TypeScript отбелязва нарастващ растеж на популярността през последните няколко години, без признаци за забавяне в скоро време. Пренасянето на динамика на безопасен код в JavaScript се оказа изключително успешно начинание.
Днес създаването на нов TypeScript проект или конвертирането на съществуващ Node.js проект в TypeScript е лесно, макар и отнемащо време.
Добавянето на поддръжка на TypeScript стана достатъчно популярно, че повечето съвременни рамки вече имат някаква форма на поддръжка на TypeScript. Angular поведе пътя с готова поддръжка на TypeScript. Днес дори React има методи за настройка на поддръжката на TypeScript.
Deno е проектиран с включена поддръжка на TypeScript, за да помогне за подобряване на вашата продуктивност. С поддръжката на TypeScript извън кутията, на Deno липсва дори минималната настройка, изисквана от Node.js за разработване на въведен JavaScript код.
Ако обичате TypeScript, можете да започнете бързо и лесно с поддръжката на Deno, но може да откриете, че липсват някои от стандартните библиотеки Node.js. Докато Deno предлага по-бърза настройка, липсата на развита екосистема може да ви попречи в процеса на изграждане.
Linting за генериране на по-чист код
Node.js разполага с голямо разнообразие от линтери, от които да избирате. Има много добре разработени опции, които можете бързо и лесно да инсталирате и конфигурирате. Подобно на случая с TypeScript, обаче, ще трябва да поработите малко, за да започнете с техния избран линтер.
Deno пое по малко по-различен път във форматирането на кода, идвайки със собствено вградено решение за linting за .js, .ts и .md файлове. Изпълнението на командата "deno fmt" автоматично ще форматира всички файлове в текущата работна директория.
Ако не сте фен на линтера по подразбиране, има опция да инсталирате и стартирате избраната от вас система за форматиране, точно както бихте направили с Node. Превключването на системи е лесно, тъй като линтерът на Deno работи чрез външна команда, а не като част от конвейера за изграждане по подразбиране.
Ако обмисляте да замените линтера на Deno с нова система, трябва да сте наясно с потенциалните проблеми със съвместимостта и да ги имате предвид. Повечето JavaScript линтери ще изискват инсталация на Node, за да работят, дори ако това не е системата, на която се изпълнява форматираният проект.
Управление на пакети
Мениджърът на пакети на възли (npm) е много добре известен сред съвременните разработчици. Надграждайки успеха на подобни системи като Pip на Python и RubyGems на Ruby, npm бързо набира популярност.
Продължителните опасения водят до развитието на конкурентни мениджъри, като pNPm и Yarn. Има някои ситуации, в които можете дори да изберете да инсталирате и използвате множество мениджъри на пакети с Node.
Днес, ако решите да разработвате в Node.js, вие сте малко разглезени за избор, когато става въпрос за управление на пакети. Node може да се похвали с процъфтяваща екосистема с много опции за пакети за инсталиране. В момента има над 1,3 милиона в главния регистър на npm.
Npm ви позволява да публикувате свои собствени пакети, което води до изумително голяма библиотека.
Deno възприе напълно различен подход към управлението на пакети. Той нито има, нито изисква система за управление на пакети. Вместо това Deno позволява директно импортиране на външни библиотеки не само от системата на разработчика, но и от всяко място, което приема HTTP заявки.
Това ви позволява да импортирате библиотеки от хранилището на Deno или всеки CDN онлайн, директно от тяхната кодова база.
Официалният регистър на пакетите на Deno не е толкова напълно развит, колкото този на Node, благодарение на почти деветгодишното преднина на Node. Възможността да импортирате библиотеки отвсякъде ви предпазва от понасяне на последствията от екосистема, която все още не е имала шанс да нарасне до пълен размер.
Участие на общността в Node и Deno
Първоначално пуснат през 2009 г. от Ryan Dahl, Node имаше достатъчно време за общността на разработчиците да се включи. С много ранни потребители и значителна библиотека от пакети, съхранявани в официалното хранилище и на ваше разположение, обществеността има много мнение за растежа на Node.js.
Самата платформа е с напълно отворен код, поддържа се от OpenJS Foundation и много сътрудници.
Deno излезе през 2018 г., почти 9 години след Node. Основно е разработен от Райън Дал, за да отговори на опасенията и съжаленията, които е имал с внедряването на Node. Днес Deno също е с отворен код под лиценза на MIT.
С много сътрудници и нарастващо собствено хранилище, Deno е видял голям интерес от общността.
Проблеми с производителността на двете рамки
За програмистите, които се интересуват от относителните разлики в производителността между двете рамки, има малка разлика между двете. Персонализираният двигател на Deno, написан на Rust, покрива основна рамка, която все още е V8 двигателят. В крайна сметка и Deno, и Node са сравними в почти всички случаи по отношение на производителността.
Това изглежда е така, независимо дали полученият код се изпълнява на сървъра или клиента. Тъй като резултатите от производителността не са фактор за решението, вие сте свободни да изберете рамката, с която се чувствате най-удобни.
Райън Дал, създателят на двете рамки, предложи различни причини за създаването на Deno. Въпреки че той спомена няколко фактора, от неспособността да включи правилно обещания в много API до избраната от него система за изграждане, производителността не беше част от процеса.
Node срещу Deno: Кой е правилният избор?
Под капака и Node.js, и Deno са забележително сходни рамки. И двата изпълняват JavaScript с помощта на двигателя V8 с подобна производителност и възможности. Въпреки че има някои разлики в синтаксиса, управлението на пакети и вградената поддръжка, вашият избор кой да използвате до голяма степен се основава на вашите предпочитания.
Node може да се похвали с изумително голяма екосистема, но Deno ви позволява да изтеглите вашите зависимости от всеки източник. В крайна сметка ще трябва да разгледате внимателно собствения си стил на разработка и да определите коя платформа е по-подходяща за вас.