Deno 1.28 منتشر شده است، چارچوبی برای سندباکس کردن برنامه های جاوا اسکریپت و تایپ اسکریپت که می تواند برای ایجاد کنترل کننده های سمت سرور استفاده شود. این پلتفرم توسط رایان دال، خالق Node.js توسعه یافته است. مانند Node.js، Deno نیز از موتور جاوا اسکریپت V8 استفاده می کند که در مرورگرهای مبتنی بر Chromium نیز استفاده می شود. در عین حال، Deno یک فورک Node.js نیست، بلکه پروژه جدیدی است که از ابتدا ایجاد شده است. کد پروژه تحت مجوز MIT توزیع شده است. بیلدها برای لینوکس، ویندوز و macOS آماده شده اند.
پروژه Deno برای ارائه محیط امن تری به کاربران و حذف خطاهای مفهومی در معماری Node.js ایجاد شد. برای بهبود امنیت، موتور V8 با Rust نوشته شده است، که از بسیاری از آسیبپذیریهای ناشی از دستکاری حافظه در سطح پایین جلوگیری میکند. برای پردازش درخواستها در حالت غیر مسدود، از پلتفرم توکیو که به زبان Rust نیز نوشته شده است استفاده میشود. توکیو به شما اجازه می دهد تا برنامه های کاربردی با کارایی بالا را بر اساس معماری رویداد محور ایجاد کنید، از چند رشته پشتیبانی کنید و درخواست های شبکه را در حالت ناهمزمان پردازش کنید.
یک تغییر کلیدی در نسخه جدید تثبیت سازگاری با بسته های میزبانی شده در مخزن NPM است که به Deno اجازه می دهد از بیش از 1.3 میلیون ماژول ایجاد شده برای پلتفرم Node.js استفاده کند. به عنوان مثال، برنامههای مبتنی بر Deno اکنون میتوانند از ماژولهای دسترسی دائمی به دادهها مانند Prisma، Mongoose و MySQL و همچنین چارچوبهای فرانتاند مانند React و Vue استفاده کنند. برخی از ماژولهای NPM همچنان با Deno ناسازگار میمانند، برای مثال به دلیل اتصال به عناصر محیطی خاص Node.js مانند فایل package.json. همچنین هنوز امکان استفاده از دستور "deno compile" با ماژول های NPM وجود ندارد. نسخه های آینده برنامه ای برای رفع این ناسازگاری ها و محدودیت ها دارند.
پشتیبانی از سیستم ماژول ECMAScript قبلاً مورد استفاده Deno و مدل Web API در همان سطح حفظ میشود و طرح بارگیری مبتنی بر URL آشنا Deno برای وارد کردن ماژولهای NPM استفاده میشود. برای دسترسی به ماژول های NPM، یک پیشوند URL ویژه "npm:" وجود دارد که می تواند مانند ماژول های Deno معمولی استفاده شود. به عنوان مثال، برای وارد کردن یک ماژول NPM، می توانید 'import { chalk } from "npm:chalk@5";'، و برای اجرای یک اسکریپت NPM از خط فرمان - "deno run --allow-env --allow" را مشخص کنید. -npm:create-vit-extra را بخوانید.
استفاده از بستههای NPM در Deno بسیار سادهتر از Node.js است، زیرا نیازی به نصب ماژولها از قبل نیست (ماژولها در اولین راهاندازی برنامه نصب میشوند)، فایل package.json وجود ندارد و node_modules پیشفرض وجود ندارد. دایرکتوری (ماژول ها در دایرکتوری مشترک ذخیره می شوند، اما می توان رفتار قدیمی را با استفاده از گزینه "--node-modules-dir" برگرداند).
برنامه های مبتنی بر NPM توانایی استفاده از کنترل دسترسی، ایزوله کردن و قابلیت های پیشرفته حساس به امنیت Deno را حفظ می کنند. برای مقابله با حملات از طریق وابستگیهای مشکوک، Deno بهطور پیشفرض تمام تلاشها برای دسترسی به سیستم را از وابستگیها مسدود میکند و هشداری درباره مشکلات شناسایی شده نمایش میدهد. به عنوان مثال، هنگامی که یک ماژول سعی می کند دسترسی نوشتن به /usr/bin/ به دست آورد، یک درخواست تأیید برای این عملیات نمایش داده می شود: deno run npm:install-malware ⚠️ ┌ درخواست های Deno دسترسی نوشتن به /usr/bin/. ├ درخواست شده توسط "install-malware" ├ دوباره با --allow-write برای دور زدن این درخواست اجرا کنید. └ اجازه می دهد؟ [y/n] (y = بله، مجاز؛ n = نه، انکار) >
بهبودهای غیر NPM در نسخه جدید شامل به روز رسانی موتور V8 برای انتشار نسخه 10.9، تشخیص خودکار فایل ها با قفل، تثبیت Deno.bench()، Deno.gid()، Deno.networkInterfaces()، Deno.systemMemoryInfo() و API های Deno. .uid()، افزودن API ناپایدار Deno.Command() برای اجرای دستورات (جایگزین جهانی برای Deno.spawn، Deno.spawnSync و Deno.spawnChild).
ویژگی های اصلی Deno:
- پیکربندی پیش فرض امنیت محور. دسترسی به فایل، شبکه و دسترسی به متغیرهای محیطی به طور پیشفرض غیرفعال هستند و باید صریحاً فعال شوند. برنامهها بهطور پیشفرض در محیطهای sandbox ایزوله اجرا میشوند و نمیتوانند بدون اعطای مجوزهای صریح به قابلیتهای سیستم دسترسی داشته باشند.
- پشتیبانی داخلی از TypeScript فراتر از جاوا اسکریپت. برای بررسی نوع و تولید جاوا اسکریپت، از کامپایلر استاندارد TypeScript استفاده می شود که منجر به کاهش عملکرد در مقایسه با تجزیه جاوا اسکریپت در V8 می شود.
- Runtime به شکل یک فایل اجرایی مستقل ("deno") ارائه می شود. برای اجرای برنامه ها با استفاده از Deno، کافی است یک فایل اجرایی برای پلتفرم خود با حجم حدود 30 مگابایت دانلود کنید که هیچ وابستگی خارجی ندارد و نیازی به نصب خاصی روی سیستم ندارد. علاوه بر این، deno یک برنامه یکپارچه نیست، بلکه مجموعه ای از بسته های Rust crate (deno_core، rusty_v8) است که می تواند به طور جداگانه استفاده شود.
- هنگام شروع برنامه، و همچنین برای بارگذاری ماژول ها، می توانید از آدرس دهی URL استفاده کنید. برای مثال برای اجرای برنامه Welcome.js می توانید از دستور “deno https://deno.land/std/examples/welcome.js” استفاده کنید. کد از منابع خارجی دانلود و در سیستم محلی ذخیره می شود، اما هرگز به طور خودکار به روز نمی شود (به روز رسانی نیاز به اجرای صریح برنامه با پرچم "--reload" دارد).
- پردازش کارآمد درخواست های شبکه از طریق HTTP در برنامه ها؛ این پلت فرم برای ایجاد برنامه های کاربردی شبکه با کارایی بالا طراحی شده است.
- توانایی ایجاد برنامه های کاربردی وب جهانی که می توانند هم در Deno و هم در یک مرورگر وب معمولی اجرا شوند.
- وجود مجموعه استانداردی از ماژول ها که استفاده از آنها نیازی به اتصال به وابستگی های خارجی ندارد. ماژول های مجموعه استاندارد تحت ممیزی و تست سازگاری اضافی قرار گرفته اند.
- پلتفرم Deno علاوه بر زمان اجرا، به عنوان مدیر بسته نیز عمل می کند و به شما اجازه می دهد تا به ماژول ها از طریق URL داخل کد دسترسی داشته باشید. به عنوان مثال، برای بارگذاری یک ماژول، می توانید در کد "import * as log from "https://deno.land/std/log/mod.ts" را مشخص کنید. فایل های دانلود شده از سرورهای خارجی از طریق URL ذخیره می شوند. اتصال به نسخه های ماژول با تعیین شماره نسخه در داخل URL تعیین می شود، به عنوان مثال، "https://unpkg.com/[ایمیل محافظت شده]/dist/liltest.js"؛
- این ساختار شامل یک سیستم بازرسی وابستگی یکپارچه (دستور "deno info") و یک ابزار برای قالببندی کد (deno fmt) است.
- همه اسکریپت های برنامه را می توان در یک فایل جاوا اسکریپت ترکیب کرد.
منبع: opennet.ru