از گذشته تا امروز، انتخاب اول همهی توسعه دهندگان جاوا اسکریپت node.js بوده و هیچ رقیب شایستهای هم برای node.js وجود نداشته است. اما همه چیز از سخنرانی رایان دال، سازندهی اصلی node.js در سال ۲۰۱۸ تغییر کرد. دال در این سخنرانی محوریت صحبتهای خود را روی معایب و مشکلات node.js و بستههای npm قرار داد و ۱۰ موردی که نمیپسندید را نام برد. سپس Deno.JS را معرفی کرد و هدف ساخت آن را رفع مشکلات بیان شدهی node.js بیان کرد. پس واضح است که deno قرار است ضعفهای node.js را برطرف سازد. شاید برایتان جالب باشد که هم Deno.JS و هم node از چهار حرف یکسان ساخته شدهاند. این شباهت علاوه بر اینکه به سازندهی یکسان آنها نیز اشاره میکند، گواهی بر این مورد است که در آیندهای نه چندان دور، شاید Deno.JS جایگزین node شود.
Deno.JS چیست ؟
Deno.JSیک محیط زمان اجرا یا run time برای جاوا اسکریپت و تایپ اسکریپت است که بر پایهی موارد زیر توسعه پیدا کرده است:
- موتور جاوا اسکریپت ورژن ۸
- زبان برنامه نویسی Rust ( بر خلاف node که با زبان ++C نوشته شده است. )
- زبان برنامه نویسی تایپ اسکریپت
- پلتفرم Tokio (با ایدهی زمان اجرای غیر همزمان)
زمان اجرای غیر همزمان یعنی برنامهی در حال اجرا، به چند بخش تقسیم میشود و این بخشها، موازی با یکدیگر وظایف خود را انجام میدهند. Deno در نقش مدیر، تضمین میکند که این عملیات بدون خطا انجام شود و در کار با بستهها و نصب و بروزرسانی آنها کمک میکند.
در بخشهای بعدی، deno و node را در زمینههای مختلف بررسی میکنیم.
هیچ پوشهی NPM یا نود ماژولی وجود ندارد!
اگر با node کار کرده باشید، میدانید که هنگام نصب یک پکیج، فایلهای جدید مربوط به آن در یک پوشه با نام نود ماژول (node module) قرار میگیرند. هر کتابخانهی مورد نیاز در برنامه باید در این پوشه قرار گیرد. در زمان اجرا نیز تمامی وابستگیهای لازم از این پوشه خوانده شده و باعث دردسرهای زیادی برای برنامه نویسان میشود، به خصوص افرادی که به صورت گروهی کار میکنند. یکی از مزایای deno، بهبود این سازوکار است.
Deno اجازه میدهد تا از هر جایی به ماژولهای خود دسترسی داشته باشید و براساس دایرکتوری آنها را فراخوانی کنید. پس دیگر نیازی به قراردادن همهی آنها در یک پوشه ندارید. توجه داشته باشید که هرچند این روش کار را بسیار راحت میکند، اما در صورت عدم کنترل و آدرسدهی نادرست توسط برنامه نویس، ممکن است باعث ایجاد خطاهای بسیاری شود.
امنیت در Deno.JS بیشتر است
به طور پیشفرض، Node.js به شما این امکان را میدهد که به همه چیز دسترسی داشته باشید. به این معنی که میتوانید هر چیزی را بخوانید و در فایلهای سیستمی بنویسید، درخواستهای مختلف ارسال کنید و متغیرهای محیطی را تغییر دهید. اگر چه برای یک توسعه دهنده این نوع دسترسی مفید است و کار را آسانتر میکند، اما اگر در هنگام نوشتن کد خود مراقب نباشید، خطر امنیتی شما را تهدید خواهد کرد.
یکی از مهمترین ویژگیهای deno، تمرکز آن بر امنیت است. برخلاف node ،deno به صورت پیشفرض کد را در یک sandbox اجرا میکند و در زمان اجرا هیچ گونه دسترسی به موارد زیر ندارد:
- فایلهای سیستمی (file systems)
- شبکه (network)
- اجرای اسکریپتهای دیگر (Execution of other scripts)
- متغیرهای محیطی (The environment variables)
Deno.JS کتابخانههای کاملتری دارد
با اینکه جاوا اسکریپت استاندارد خود را نسبت به نسخههای اولیهی node بهبود داده است، اما هنوز هم دارای کتابخانههای کمتری در مقایسه با سایر زبانهای برنامه نویسی میباشد. deno تلاش میکند تا این کمبود را جبران کرده و ادعا میکند که کتابخانهی استاندارد کاملتری را ایجاد کرده است. این کتابخانهها به توسعه دهندگان اجازه میدهند تا از ابزارهای رسمی برای انجام وظایف خود استفاده کنند و فقط در صورت عملیات پیچیده به سراغ کتابخانههای خارجی بروند.
در deno کتابخانههایی وجود دارند که میتوان به کمک آنها، محیط ترمینال را شخصیسازی کرد و برای مثال، رنگ متن در آن را تغییر داد. علاوه بر این، توابعی برای کار با ساختمان دادههای خارجی مانند اکسل، کار با http و حتی سوکت نویسی نیز در نظر گرفته شده است.
تایپ اسکریپت یکپارچه سازی شده است
تایپ اسکریپت (typeScript) به عنوان Superset زبان جاوا اسکریپت ارائه شده و هدف آن کدنویسی آسان با کمترین میزان خطا و استفاده از ویژگیهای پیشرفتهی زبانهای شیگرا، جهت نوشتن برنامههای سمت سرور و سمت کاربر است. تایپ اسکریپت با کتابخانههای محبوب جاوا اسکریپت مانند ReactJS و JQuery سازگار است و پس از کامپایل، میتوانید اطمینان حاصل کنید که خروجی نهایی کد شما با انواع مرورگرها سازگار خواهد بود. در سالهای اخیر توسعه دهندگان زیادی علاقهمند به تایپ اسکریپت شده و در این حوزه فعالیت میکنند.
برخلاف node که همه چیز را به جاوا اسکریپت ترجمه میکند، deno اجازه میدهد تا از تایپ اسکریپت به صورت مستقیم استفاده کنید. علاوه بر آن، این امکان وجود دارد که برنامهها را به زبان جاوا اسکریپت نوشته و بدون هیچ مشکلی با deno اجرا کنید. چون deno به صورت پیشفرض دسترسیهای محدودی را در اختیار قرار میدهد، اما میتوانید با استفاده از فایل tsconfig.json، پیکربندی مخصوص خود را بنویسید.
سایر مزایای Deno JS چیست ؟
یکی از اهداف deno ایجاد سازگاری بیشتر برنامه با مرورگر است. برای مثال زمانی که از ES استفاده میکنید، دیگر نیازی به استفاده از ابزارهایی مانند webpack نیست و برنامه به صورت خودکار با مروگر sync میشود. علاوه بر آن، ابزارهایی مانند babel نیز وجود دارند که کد شما را به نسخههای ES5 تبدیل میکنند. همچنین میتوانید برنامهی خود را برای مرورگرهایی آماده کنید که از نسخههای جدید جاوا اسکریپت پشتیبانی نمیکنند. البته توجه داشته باشید که این کار باعث میشود که حجم کدهایی که قرار است بنویسید، افزایش پیدا کند.
علاوه بر مواردی که در بخشهای قبل توضیح دادیم، deno دارای مزایای دیگری نیز میباشد. برخی این مزایا عبارتند از:
- linter: به پیداکردن مشکلات موجود در برنامه به شما کمک میکند.
- تغییر فرمت خودکار: به صورت خودکار متن را به زبانهای جاوا اسکریپت و تایپ اسکریپت ترجمه میکند.
- بررسی وابستگی: هنگام اجرای یک برنامه روی یک ماژول ES، تمام وابستگیهای موجود در یک درخت را لیست خواهد کرد.
- bundler: یک اسکریپت مشخص و وابستگیهای آن را به یک فایل واحد تبدیل میکند.
- اجراکنندهی تست (test runner): میتوانید از این تکنیک برای تست کد جاوا اسکریپت یا کد تایپ اسکریپت و ارتباط بین کتابخانهها استفاده کنید.
- دیباگر (debugger): اجازه میدهد تا برنامههای deno با کروم، ویژوال استودیو کد و دیگر ابزارها دیباگ شود.
- file watcher: فایلها و پوشهها را در جستجوی تغییرات بررسی میکند و اگر فایلی نیاز به آپدیت داشت، به شما اطلاع میدهد.
جمعبندی
در این مقاله آموختیم که Deno JS چیست و چه تفاوتهایی با node دارد. Deno یک جایگزین مناسب برای node است، چرا که با هدف رفع نواقص موجود در node طراحی شده است. در این زمانی که در حال نوشتن این مقاله هستیم، مدت زیادی از انتشار deno نگذشته است و هنوز کتابخانههای زیادی در node وجود دارد که در deno استاندارد نشدهاند. بنابراین شاید بهتر باشد تا منتظر نسخههای بعدی آن بمانیم.