Deno.js یک runtime برای جاوااسکریپت است که توسط سازنده Node.js به وجود آمده است. بنابراین سازنده Node.js نوعی جایگزین برای آن معرفی کرده. در ادامه این مقاله به بررسی Deno.js میپردازیم.
اگر با Node.js برنامه نویسی میکنید، اصولاً نباید مشکلی با آن داشته باشید. اگر هم مشکلی وجود دارد، انتخاب شتاب زده پلتفرم جدید Deno.js، به نظر کار درستی نیست. در حال حاضر Node.js توسط هزاران شرکت بزرگ استفاده میشود و یک جامعه بسیار فعال و اکوسیستم بسیار بزرگ برای خود دارد. با این حال Node.js ایرادات و نواقصی نیز دارد که میتوان برای رفعشان تلاش کرد و نباید زیاد آنها را جدی گرفت.
مورد آخر، خبر از یک مشکل بزرگی میدهد. البته این نکته را باید در نظر گرفت که هرچند که Node.js به صورت پیش فرض امن نیست اما امکان این وجود دارد که شما به عنوان یک برنامه نویس، امنیت برنامه خود را تامین کنید.
یک اسکریپت Node.js به صورت پیش فرض امنیت بالایی ندارد. به صورت پیش فرض تمام اسکریپتهای Node.js، به سیستم فایل سیستم، شبکه و کل محیط دسترسی دارند. به نظر میرسد که چنین طراحی، سیستم را انعطاف پذیر میکند. اما جز این معنی دیگری نیز دارد. به عنوان مثال ابزارهایی مانند ESLint که از اسکریپهای بزرگ Node.js به شمار میروند، از لحاظ تئوری قادر هستند با دسترسی به فایل سیستم شما، هرکاری با آنها انجام دهند.
[button class=”github-btn” href=”http://frontcast.ir/javascript-function-execution”]ویدیوی آموزشی: اجرای توابع در جاوااسکریپت[/button]
پلتفرم Deno.js را عموماً میتوان در سیستمهای شبیه Node.js جایگزین کرد. مثلاً میتوانید از Deno.js برای ساخت وب سرورها، اسکریپتها و … استفاده کنید.
و اما Deno
اجازه دهید کمی دقیقتر به موارد ذکر شده بپردازیم.
شما میتوانید تمامی کدهای جاوااسکریپت را با Deno بنویسید، اما اگر مایل به استفاده از TypeScript هستید، میتوانید با داشتن کامپایلر درست، هر زمان که خواستید دستورات TypeScript را در Deno پیاده سازی کنید. به عنوان مثال اگر قطعه کد زیر با Node.js اجرا شود شکست خواهد خورد، اما با Deno کار میکند:
let message: string message = 'Hi, this is a string.' console.log(message)
استفاده از TypeScript باعث میشود تا نگارش بهتری برای دستورات برنامه نویسی داشته باشید و از موارد غیرضروری اجتناب کنید. البته همانطور که قبلاً ذکر شد، استفاده از TypeScript کاملاً اختیاری است، اما اگر مایل به استفاده از آن هستید نیازی نیست که کامپایلر مخصوص TypeScript را راهاندازی کنید.
Node.js سیستم ماژول خاص خود را دارد.
const http = require('http') const somethingFromMyFile = require('./my-file')
ما به استفاده از این دستورات عادت کردهایم. اما این ماژولها با آنچه که در مرورگرها میشناسیم، متفاوت هستند.
import something from './someFile.js' import { someFunction } from 'https://cdn.some-page.com/some-package.js'
در مرورگر از URL های نسبی یا مطلق استفاده میکنیم. در واقع ما گاهی از نام ماژولها یا بعضی اوقات از مسیر فایلها استفاده نمیکنیم، بلکه هر دو در خود Node.js انجام می شوند. بعلاوه، در پروژه های Node.js ما از ابزاری به نام npm برای مدیریت بستههای نرم افزاری استفاده میکنیم. npm بستهها را دانلود کرده و در پوشه node_modules ذخیره میکند.
این پوشه که یکی از مهمترین بخشهای Node.js است، میتواند به آسانی بزرگ شود. کد زیر متکی به چهارچوب express موجود در node_modules است. اگر یک فایل ساده express.js و یا هر چیزی شبیه آن باشد ، به درستی اجرا نخواهد شد.
const express = require('express')
Deno این امر را آسان میکند. شما میتوانید به سادگی از دستورات import استفاده کنید و نیازی به یک ابزار مدیریت بسته مانند npm ندارید. کد Deno شبیه کد زیر خواهد بود.
import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'
این دستور تابع serve را از بسته server.ts فراخوانی میکند. زمانی که Deno برای اولین بار اجرا میشود، این بسته به طور خودکار دانلود و ذخیره خواهد شد.
Node.js با توابع callback زیاد کار میکند. زیرا در مقطع زمانی که Node.js ساخته شد، توابع مدرن جاوااسکریپت مانند Promiseها مهم و کاربردی نبودند. برای کار با ویژگیهای جدید و توابع مدرن جاوااسکریپت میتوانیم از پلتفرم Deno استفاده کنیم. شما میتوانید یک وب سرور بسیار ساده با قطعه کد زیر بنویسید. کدی که قابلیت تکرار دارد.
import { serve } from 'https://deno.land/std@0.50.0/http/server.ts' const server = serve({ port: 3000 }) for await (const req of server) { req.respond({ body: 'Message from Deno!' }) }
در کد زیر تقریباً همان سرور را با Node.js توسعه دادهایم. شما میتوانید این دو کد را با هم مقایسه کنید.
const http = require('http'); const server = http.createServer((res, res) => { res.end('Message from Node'); }); server.listen(3000);
همانطور که گفته شد، Deno امنیت بیشتری دارد. البته به معنی این نیست که همیشه برنامههای نوشته شده با Deno امن هستند. این فقط بدان معنی است که اسکریپتهای Deno نمیتوانند به طور پیش فرض همه کارها را روی کامپیوتر شما انجام دهند. به عنوان مثال، اگر اسکریپت سرور فوق را اجرا کنید، یک پیام خطا دریافت خواهید کرد.
اسکریپت تنها زمانی به درستی اجرا خواهد شد که شما دسترسیهای لازم را به آن داده باشید.
deno run --allow-net my-server.ts
در قطعه کد اخیر، –allow-net دسترسی به شبکه برای اسکریپت را فراهم ساخته است. به همین روال سایر دسترسیهای لازم را میتوان اختصاص داد. به عنوان مثال برای خواندن به حالت (–allow-read) و برای نوشتن به حالت (–allow-write) میتوان اجازه دسترسی صادر کرد.
استفاده از Deno.js بد به نظر نمیرسد. اما ممکن است با نگاهی به لیست ویژگیهای جدید، در ذهن شما این جمله نقش ببندد: این ویژگیها خوب هستند اما درحال حاظر من با Node.js مشکلی ندارم و از آن استفاده میکنم. این کاملاً قابل درک است. در هر صورت Deno نسخه کاملاً جدیدی است که ورژن اول آن در تاریخ ۱۳ مه ۲۰۲۰ منتشر شد. نسخه نخست Deno هنوز تکمیل نشده است و کامل نمیتوان در مورد آن نظری داد. معلوم نیست که در آینده پیشرفت چشمگیری خواهد داشت و به چیز بزرگی تبدیل خواهد شد و یا خیر.
شما میتوانید از Deno در دمو برنامههای خود یا برنامههای کوچکتر استفاده کنید تا تجربه کار با آن را داشته باشید. گذر زمان ثابت خواهد کرد که آیا این پلتفرم قابلیت استفاده در پروژههای بزرگ را دارد یا نه. آیا شرکتهای بزرگ تمایلی به استفاده از این پلتفرم دارند، یا هنگام کار با آن به مشکلاتی برمیخورند. در حال حاضر توصیه من به شما این است که حتماً Deno را دنبال کنید و از آن غافل نشوید. اما کامل بر روی آن سوئیچ نکنید. همچنان به استفاده از Node.js ادامه داده و اجازه دهید که Deno در طول یکی دو سال آینده خود را به توسعه دهندگان اثبات کند.
فراموش نکنید که همه اینها ابزارهایی هستند که برای زبان برنامه نویسی جاوااسکریپت ساخته شدهاند. همیشه زبانهای برنامه نویسی پایداری بیشتری دارند. برای همین سعی کنید که یادگیری و تمرکز اصلی شما برای زبان برنامه نویسی جاوااسکریپت باشد.
[button class=”github-btn” href=”http://frontcast.ir/become-a-javascript-developer”]پادکست شماره ۵: تبدیل شدن به توسعه دهنده جاوااسکریپت[/button]
دیدگاهها:
علیرضا
خرداد 17, 1399 در 10:54 ق.ظ
درود بر شما جناب صدری
اگر بخواهیم یک اپلیکیشن برنامه نوشته شده بر پایه nodejs تبدیل کنیم به deno در آینده چه مراحلی باید طی کنیم ؟!
تدبیری اندیشیده شده ؟! یا باید بکوبیم از نو بسازیم
مسعود صدری
خرداد 17, 1399 در 11:08 ق.ظ
سلام
زمانی که پلتفرم اصلی بر اساس جاوااسکریپت هست، قطعا ریفکتور کردن سادهتر میشه.
ولی باید بیشتر بگذره تا ببینیم Deno.js چطور پیش میره. فکر میکنم الان نمیشه خیلی قطعی در موردش صحبت کرد.