اگر یک توسعه دهنده فرانت-اند باشید، از Node Package Manager (NPM) در برنامههای خود استفاده کردهاید. این مدیر پکیج پیش فرض برای محیط زمان اجرای جاوااسکریپت در NodeJs است. NPM مدت زیادی در میان ما بوده است و یک جامعه عظیم در اطراف آن وجود دارد که روزانه از آن استفاده میکنند.
با این حال آیا تا به حال فکر کردهاید که ابزار دیگری به زودی جایگزین آن شود؟ آیا دورانی وجود خواهد داشت که توسعه دهنده فرانت-اند از NPM اطلاعاتی نداشته باشد و از روشی متفاوت برای مدیریت پکیجها و وابستگیها در برنامه خود استفاده کند؟
این سوالات تا زمان معرفی Deno مطرح نمیشد.
هدف این مقاله بررسی موارد زیر است:
- Deno چیست؟
- مقایسه بین Node.js و Deno
- آیا Deno جایگزین Node.js میشود و NPM را از بین میبرد؟
Deno چیست؟
Deno یک برنامه زمان اجرا (runtime) ساده، مدرن و ایمن برای JavaScript و TypeScript است که از موتور V8 استفاده میکند و توسط Rust ساخته شده است.
رایان دال - خالق اصلی Node.js - از Deno در کنفرانس JSConf EU 2018 پرده برداشت و آن را به عنوان نیمه بهتر Node.js معرفی کرد. Deno میتواند هم به عنوان runtime و هم مدیر بسته در یک اجرای واحد عمل کند تا اینکه به یک مدیر بسته جداگانه مانند Node.js نیاز نباشد. این ابزار توسط موارد زیر ساخته شده است:
- V8 (مشابه زمان اجرای Node.js)
- Rust (به جای ++C)
- TypeScript (به جای VanillaJS)
- Tokio (به جای حلقه رویداد libuv در Node.js)
پس چرا Deno بهتر از Node.js و NPM در نظر گرفته میشود؟ چند دلیل در پشت این قضیه وجود دارد. در ادامه به بهبودهای اصلی Node.js که توسط Deno معرفی شده است، میپردازیم.
نکته: کامپوننتهای قابل استفاده مجدد خود را با استفاده از Bit (Github)بین پروژهها به اشتراک بگذارید. Bit اشتراک گذاری، مستند سازی و سازماندهی کامپوننتهای مستقل در هر پروژه را ساده میکند.
همچنین برای حداکثر استفاده مجدد از کد، همکاری در کامپوننتهای مستقل و ساخت برنامههایی با مقیاس بالا مورد استفاده قرار میگیرد.
بیت از Node ، TypeScript ، React ، Vue ، Angular و موارد دیگر پشتیبانی میکند.
کامپوننتهای به اشتراک گذاشته شده ریاکت در Bit.dev
مقایسه بین Node.js و Deno
توقف کامل برای مدیران بسته
Deno یک مدیر بسته متمرکز و یا pack.json ندارد. این بدان معنی است که Deno به طور مستقیم از ماژولهای NPM پشتیبانی نمیکند.
پس چگونه Deno وابستگیها را نصب میکند؟
به جای بارگیری وابستگیها از طریق یک مدیر بسته و نگهداری یک پوشه بزرگ مانند node_modules ، Deno از ماژولهایی استفاده میکند که به عنوان URL یا مسیر فایل ارجاع شدهاند. نگاهی به مثالهای زیر بیاندازید.
import * as log from "https://deno.land/std@0.68.0/log/mod.ts";
import { serve } from “https://deno.land/std@0.50.0/http/server.ts";
هنگامی که برنامه را شروع کردید، Deno همه ماژولها را بارگیری کرده و آنها را ذخیره میکند. با این حال اگر شما نیاز به بارگیری مجدد ماژولها داشته باشید، باید صریحا با استفاده از فلگ --reload آن را درخواست کنید.
حتی با اینکه Deno به طور مستقیم از ماژولهای NPM پشتیبانی نمیکند، اما یک کتابخانه سازگاری با Node (Node Compatibility Library) فراهم میکند که به شما امکان میدهد در صورت لزوم از برخی از ماژولهای NPM استفاده کنید.
در زیر مثالی از چگونگی استفاده از آن آورده شده است.
import { createRequire } from "https://deno.land/std/node/module.ts";
const require = createRequire(import.meta.url);
const esprima = require("esprima");
const program = 'const answer = 42';
console.log(esprima.tokenize(program));
برای اجرای آن باید از فلگ --allow-read استفاده کنید. موارد زیر فقط برای خواندن پوشه node_modules محدود شده است.
deno run --allow-read=node_modules esprima.js
این روش تا حدودی سازگاری با Node.js و NPM را فراهم میکند.
ایمنی Deno بیشتر است
به طور پیش فرض امنیت بالایی دارد. بدون دسترسی غیرمجاز به فایلها، شبکه یا محیط مگر اینکه صریحا فعال باشد.
اگر برنامهای را با استفاده از Node.js اجرا کنید، دسترسی مستقیم برنامه به متغیرهای شبکه، سیستمعامل، تماسهای سیستمی، سیستم فایل و محیط شما امکان پذیر است. این میتواند تهدیدی جدی باشد. اما با Deno همه این دسترسیهای مستقیم از بین میرود. از این رو Deno به عنوان پیش فرض ایمن معرفی میشود. این سطح از امنیت با اجرای Deno روی سندباکس حاصل میشود. اگر برنامه به سطوح دسترسی خاصی نیاز داشته باشد، باید آنها را صریحا مشخص کنید و با استفاده از فلگها اجازه دسترسی دهید.
بیایید نگاهی به یک مثال بیندازیم.
در صورت نیاز دسترسی Deno به شبکه، باید فلگ زیر به دستور اضافه شود.
deno run --allow-net MyDenoScript.ts
به همین ترتیب فلگهای زیادی در دسترس است تا هنگام استفاده از Deno، سطح دسترسی خاصی به برنامه شما را فراهم کند. گزینههای امنیتی که میتوانند مجاز باشند به شرح زیر است.
--allow-all # Allow all permissions
--allow-env # Allow environment access
--allow-hrtime # Allow high resolution time measurement
--allow-net=<allow-net> # Allow network access
--allow-plugin # Allow loading plugins
--allow-read=<allow-read> # Allow file system read access
--allow-run # Allow running subprocesses
--allow-write=<allow-write> # Allow file system write access
Deno از TypeScript پشتیبانی میکند
امروزه TypeScript در بین جامعه توسعه دهندگان بسیار محبوب است. این یک مجموعه برتر از جاوااسکریپت است. Deno مستقیما از TypeScript پشتیبانی میکند و نیازی به تنظیم محیط برای استفاده دستی از آن ندارد. این یک مزیت بزرگ است، چرا که میتواند سرعت توسعه شما را بهبود بخشد.
به غیر از موارد زیر، Deno دارای ویژگیهایی است که با Node.js متفاوت است.
- مجموعهای از ماژولهای استاندارد بررسی شده را دارد (اینها با یک نسخه خاص Deno کار میکنند).
- برای اکشنهای ناهمزمان promiseها را برمیگرداند.
- در اثر خطاهای کشف نشده متوقف میشود.
- به عنوان یک اجرای واحد در نظر گرفته میشود.
با توجه به این مزایا و ویژگیها، Deno پس از انتشار کاملا مورد بحث قرار گرفت.
آیا Deno جایگزین Node.js میشود و NPM را از بین میبرد؟
ما در حال بررسی ویژگیهای مختلف Deno و تفاوت آن با زمان اجرای Node.js در تمام این مدت بودهایم. اکنون یک سوال اساسی پیش میآید. آیا Deno، NPM را از بین خواهد برد؟ آیا در آینده مفهوم مدیر بسته را کنار خواهیم گذاشت؟ من اینگونه فکر نمیکنم!
به نظر من معرفی Deno باعث از بین رفتن Node.js یا مدیر بسته آن نمیشود. دلیل این امر آن است که بیش از یک دهه میباشد که از Node.js و NPM در بسیاری از برنامهها استفاده میشود. اکوسیستم Node.js آنقدری بزرگ است که جایگزین ندارد و تا زمانی که Deno صد درصد سازگاری Node.js را نداشته باشد، نمیتوانیم برای استفاده از آن به هر برنامهای مهاجرت کنیم.
با اینکه میتوان از Deno در برنامههای جدید استفاده کرد. به دلیل ماهیت ایمن و سایر مزایای آن احتمالا در بین کاربران برای کاربردهای جدید محبوب خواهد بود. برخی از برنامههای قدیمی هم حتی ممکن است در برخی موارد استفاده از Deno را شروع کنند. اما به نظر من Deno جای Node.js را نمیگیرد و NPM را به طور کامل از بین نمیبرد. با توجه به استفاده زیاد و اکوسیستم گسترده، میتوانیم انتظار داشته باشیم که Node.js و NPM در آینده به مدت طولانی همراه ما باقی بمانند.
اگر از علاقه مندان به حوزه فناوری هستید، همیشه جستجوی موارد جدید و تعیین قابلیت استفاده از آنها در پروژههای بعدی بسیار مهم است. بنابراین حتی اگر ممکن است Deno جایگزین Node.js نشود، یادگیری آن و استفاده در صورت لزوم و بررسی قابلیت اجرا هیچ ضرری نخواهد داشت.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید