از زمان اعلام خود ، Deno علاقه زیادی در جامعه جاوا اسکریپت ایجاد کرده است. به عنوان زمان اجرای جاوا اسکریپت که توسط خالق Node طراحی شده است ، ممکن است انتظار داشته باشید شباهت های زیادی بین این دو پروژه وجود داشته باشد و وجود داشته باشد. با این حال ، تفاوت های مهمی نیز وجود دارد ، به این معنی که شما فقط نمی توانید یکی را جایگزین دیگری کنید.

این مقاله نگاهی به Deno در رابطه با “پسر عموی بزرگتر” خود می اندازد تا به درک مشترکات آنها و تفاوت آنها با یکدیگر کمک کند. (اگر می خواهید ابتدا لاغر Deno را بدست آورید ، مقدمه اخیر ما را بررسی کنید.)

پشتیبانی از زبان

هر دو پروژه زمان اجرا JavaScript هستند و به شما اجازه می دهند کد JavaScript را در رایانه ای خارج از مرورگر وب اجرا کنید. بیایید ببینیم که آنها از نظر پشتیبانی زبان چگونه جمع می شوند.

Node.js

نسخه فعلی LTS از Node (نسخه 12.18.1 هنگام نوشتن) از نحو و ویژگی های مدرن JavaScript پشتیبانی می کند. همچنین از 75٪ مشخصات ES2020 پشتیبانی می کند. ماژول های ECMAScript نیز پشتیبانی می شوند ، اما در حال حاضر فقط به عنوان آزمایشی طبقه بندی می شوند: شما باید از آن استفاده کنید .mjs پسوند پرونده یا اضافه کردن ویژگی "type": "module" به پروژه شما package.json فایل.

برای اجرای TypeScript (یا هر زبان دیگر) در Node ، کد باید در JavaScript که موتور V8 می تواند اجرا کند ، کامپایل شود. چندین روش مختلف برای انجام این کار وجود دارد ، با موافقان و مخالفان مختلف ، بنابراین بلند شدن و دویدن به معنای انتخاب یکی از این روش ها و دنبال کردن مراحل نصب لازم است.

دنو

من قادر به یافتن هیچ اشاره ای به مشخصات جاوا اسکریپت پشتیبانی شده توسط Deno نبودم ، اما چون از V8 در زیر کاپوت نیز استفاده می کند ، پشتیبانی مشابه Node را بر عهده می گیرم. آزمایشات خودم نشان می دهد که Deno از ویژگی های ES2020 مانند پشتیبانی می کند Promise.allSettled() و globalThis کلمه کلیدی. ماژول های ECMAScript پیش فرض هستند ، ماژول های CommonJS پشتیبانی نمی شوند مگر اینکه از کتابخانه سازگاری گره استفاده کنید (بعداً درباره این بعداً اطلاعات بیشتری کسب کنید).

TypeScript به عنوان یک زبان درجه یک در Deno پشتیبانی می شود ، به این معنی که خارج از جعبه کار می کند: بدون نصب ابزارهای اضافی برای انتقال به JavaScript ابتدا. مطمئناً موتور V8 از TypeScript به صورت بومی پشتیبانی نمی کند ، بنابراین Deno همچنان در حال انتقال کد زیر کاپوت است ، اما این به عنوان یک توسعه دهنده برای شما یکپارچه و شفاف است.

من همچنین نتوانستم اشاره کنم که کدام نسخه از TypeScript Deno v1.0.1 استفاده می کند ، اما از زنجیره ای اختیاری و ادغام پوچ (اما نه زمینه های کلاس خصوصی) پشتیبانی می کند که آن را به عنوان TS 3.7 ثابت می کند.

API ها

Deno و Node هر دو API های خود را در معرض توسعه دهندگان قرار می دهند ، به ما اجازه می دهند برنامه هایی را بنویسیم که در واقع می توانند کارهای مفیدی مانند خواندن و نوشتن فایل ها و ارسال و دریافت درخواست های شبکه را انجام دهند.

Node.js

هنگامی که Node برای اولین بار منتشر شد ، هیچ پشتیبانی داخلی از Promises وجود نداشت. در نتیجه این ، بیشتر API های مربوط به عملیات ناهمزمان برای پاسخگویی به خطای اول نوشته شده اند:

const fs = require('fs');
fs.readFile('readme.txt', (err, data) => {
  if (err) {
    
  }
  
});

حتی اگر توسعه دهندگان گره اکنون به Promises و نحو async / انتظار دسترسی دارند ، اما API ها همچنان برای بازگشت سازگاری انتظار بازگشت دارند.

دنو

API Deno برای بهره گیری از ویژگی های مدرن JavaScript طراحی شده است. همه روشهای ناهمزمان قول ها را برمی گردانند. Deno همچنین از سطح بالاترین سطح انتظار پشتیبانی می کند ، بدین معنی که شما می توانید از await در اسکریپت اصلی خود بدون نیاز به بسته بندی در یک تابع async استفاده کنید.

try {
  const data = await Deno.readFile('readme.txt');
  
} catch (e) {
  
}

تیم توسعه همچنین تصمیم گرفت که در صورت امکان از استانداردهای وب استفاده کند ، این بدان معنی است که آنها API مرورگر را در مواردی که عملی است عملی کرده اند. Deno یک جهانی را فراهم می کند window object و API هایی مانند addEventListener و fetch. دسترسی به fetch به خصوص خوب است ، زیرا با Node باید این مورد را پر کنید یا از کتابخانه شخص ثالث استفاده کنید.

ماژول سازگاری

Deno فراهم می کند یک لایه سازگاری با هدف اجازه استفاده مجدد از بسته های موجود Node. هنوز کامل نشده است ، اما در حال حاضر از بارگیری ماژول های CommonJS از طریق پشتیبانی می کند require()، در میان چیز های دیگر.

مدیریت بسته

مدیریت بسته یکی از حوزه هایی است که Deno نشان دهنده یک خروج بنیادی از روش Node برای انجام کارها است. از آنجا که هنوز برای Deno روزهای آغازین است ، باید دید که آیا رویکرد آن سودمند است یا خیر.

Node.js

همانطور که ممکن است مطلع باشید ، Node با مدیر بسته خود به نام npm همراه است که برای نصب و مدیریت بسته های شخص ثالث استفاده می شود. npm عمدتا با آنلاین استفاده می شود رجیستری npm، جایی که بیشتر بسته های شخص ثالث موجود ذکر شده است.

وقتی از npm برای نصب بسته در پروژه خود استفاده می کنید ، a package.json پرونده برای تعیین نام بسته و دامنه نسخه قابل قبول استفاده می شود. خود بسته (بعلاوه بسته ها) آی تی بستگی دارد) سپس در a بارگیری می شوند node_modules پوشه داخل پروژه شما

دنو

Deno به طور کلی نیاز به مدیر بسته را برطرف می کند. درعوض ، بسته ها مستقیماً از طریق یک URL به آنها پیوند می خورند:

import { Response } from "https://deno.land/std@0.53.0/http/server.ts";

در اولین اجرای کد شما ، Deno تمام وابستگی ها را واکشی و کامپایل می کند. سپس آنها جدا از پروژه شما در سیستم فایل ذخیره می شوند ، بنابراین اجرای بعدی بسیار سریعتر است.

مشابه npm است package-lock.json پرونده ، Deno به شما اجازه می دهد تا یک پرونده قفل مشخص کنید که برای اطمینان از اینکه فقط از وابستگی هایی که با نسخه دقیق شما وارد کرده اید مطابقت دارد استفاده شود

بسته های شخص ثالث

یک زبان می تواند بر اثر نشاط زیست بوم خود شکوفا شود یا بمیرد ، زیرا بهره وری متکی بر عدم نیاز به اختراع مجدد چرخ است! در اینجا ، به نظر می رسد که Node در حال حاضر از لبه برخوردار است.

Node.js

Node دارای اکوسیستم گسترده و متنوعی از کتابخانه ها و بسته های موجود است. در 11 سال از انتشار آن ، بیش از یک میلیون بسته ها در رجیستری npm ثبت شده اند. البته ، کیفیت می تواند بسیار متفاوت باشد و بسیاری دیگر به طور فعال حفظ نمی شوند ، اما همچنان یک مزیت بزرگ برای توسعه دهندگان Node است.

دنو

همانطور که در بخش قبلی دیدیم ، Deno با اجازه دادن به اسکریپت ها برای وارد کردن ماژول ها به طور مستقیم از هر URL عمومی ، سعی در جلوگیری از نیاز به مدیر بسته یا رجیستری دارد. البته ، اگر نمی دانید چه چیزهایی در آنجا وجود دارد ، وارد کردن بسته ها کار سختی است ، بنابراین وب سایت Deno اطلاعات خود را حفظ می کند لیست ماژول های شخص ثالث سازگار. از زمان نوشتن ، 707 ماژول در لیست وجود دارد.

کتابخانه استاندارد Deno

روشی که Deno سعی در بهبود تجربه توسعه دهنده دارد این است که کتابخانه استاندارد یاوران و برنامه های کاربردی برای کارهای مشترک. تمام ماژول ها توسط توسعه دهندگان اصلی کنترل می شوند تا از کد قابل اعتماد و با کیفیت اطمینان حاصل کنند. ماژول هایی برای مواردی مانند این وجود دارد پردازش آرگومان های خط فرمان، و رنگ آمیزی خروجی ترمینال – هر دو موردی که فقط به عنوان بسته های شخص ثالث برای Node در دسترس هستند.

امنیت

شاید یکی از محبوب ترین پیشرفت های Deno نسبت به Node ، سیستم مجوزها باشد. بیایید دلیل آن را بررسی کنیم.

Node.js

زمان اجرا Node بسیار مجاز است و به کد اجازه می دهد تا به شبکه و سیستم فایل رایانه دسترسی کامل داشته باشد. این امکان وجود دارد که کد شخص ثالث در صورت لغو انتخاب ، سیستم شما را ویران کند.

دنو

بهبود مدل امنیتی کاری است که رایان دال در طراحی Deno به طور مشخص تصمیم به انجام آن گرفت. به طور پیش فرض ، همه کد ها در یک محیط sandbox امن اجرا می شوند. این از دسترسی کد به مواردی مانند سیستم فایل ، شبکه و متغیرهای محیط جلوگیری می کند ، مگر اینکه دسترسی به طور خاص با آرگومان خط فرمان اعطا شود.


deno run --allow-net server.ts

حتی بهتر ، هنگام دسترسی خواندن یا نوشتن به سیستم فایل یا دسترسی به شبکه ، می توانید لیست سفید را تهیه کنید. این بدان معنی است که می توانید دسترسی خواندن / نوشتن یک برنامه Deno را برای دسترسی به پروژه محدود کنید data به عنوان مثال پوشه ، محدود کردن هرگونه آسیب احتمالی مخرب.

Deno: باتری گنجانده شده است

قبل از اینکه ما را جمع کنیم ، من فقط می خواستم در مورد یک چیز دیگر صحبت کنم. اگر مرور کنید در بخش ابزارهای راهنما، متوجه خواهید شد که Deno “ویژگی های پاداش” خوبی را در اختیار ما قرار می دهد! موارد زیر ابزارهای داخلی هستند تا تجربه توسعه دهنده را کمی زیبا تر کنند:

  • بسته بندی کننده: یک اسکریپت مشخص را بسته بندی می کند و وابستگی های آن به یک پرونده واحد
  • اشکال زدا: اجازه می دهد تا برنامه های Deno خود را با Chrome Devtools ، VS Code و سایر ابزارها اشکال زدایی کنید (توجه داشته باشید: Node همچنین با اشکال زدایی همراه است)
  • بازرس وابستگی: اجرای این مورد بر روی ماژول ES لیست تمام وابستگی های یک درخت را نشان می دهد
  • تولید کننده اسناد: حاشیه نویسی JSDoc را در یک فایل داده شده تجزیه می کند و مستندات را خارج می کند
  • قالب ساز: قالب جاوا اسکریپت و کد TypeScript را به صورت خودکار قالب بندی می کند
  • دونده آزمایشی: می توانید از این مورد برای آزمایش کد JS و TS خود ، همراه با ماژول ادعاها در کتابخانه استاندارد استفاده کنید
  • لاینر: یک خط کد (در حال حاضر ناپایدار) برای کمک به مشکلات احتمالی در برنامه های شما

حکم

هدف این مقاله حمایت از Node یا Deno نیست ، بلکه مقایسه و تقابل این دو است. اکنون باید درکی از شباهت های بین دو زمان اجرا و شاید مهمتر از آن تفاوت ها داشته باشید.

Deno مزایای خاصی را به توسعه دهندگان ارائه می دهد ، از جمله سیستم مجوزهای قوی و پشتیبانی از کلاس اول TypeScript. تصمیمات طراحی و ابزار اضافی داخلی در جهت ایجاد یک محیط تولیدی و یک تجربه خوب توسعه دهنده است.

از طرف دیگر ، گره دارای یک اکوسیستم عظیم و جاافتاده است که بیش از یک دهه از ساخت آن می گذرد. این ، بهمراه انبوهی از اسناد و مدارک آموزشی موجود ، احتمالاً Node.js را برای مدتی دیگر یک شرط بندی مطمئن می کند.

بنیادهای Deno

با Deno سرعت بگیرید. مجموعه بنیادهای Deno ما به شما کمک می کند اولین قدم های خود را به دنیای Deno و فراتر از آن بردارید ، و ما دائماً به آن اضافه می کنیم. ما آموزش های لازم برای حرفه ای شدن را برای شما به ارمغان می آوریم. همیشه می توانید شاخص ما را در پایان مقدمه Deno به روز کنید:

➤ بنیادهای Deno