هل Deno the New Node.js؟

في مشروعنا ، IDE للعمل مع TestMace API ، يستخدم TypeScript كلغة رئيسية ، لذلك نحن مهتمون بنشاط بالمشروعات المتعلقة بهذه اللغة. انتباهك اليوم هو ترجمة لمقال حول أداة Deno-runtime لـ TypeScript (ولكن هذه ليست الميزة الوحيدة). هل لديك قراءة لطيفة.



منذ حوالي ثلاثة أشهر ، قدم Ryan Dahl (منشئ Node.js) عرضًا تقديميًا في المؤتمر ، " 10 أشياء أنا آسفها حول Node.js About " ، حيث تحدث عن بعض قرارات تصميمه غير الناجحة لـ Node.js. كرس ما يقرب من نصف خطابه إلى النموذج التجريبي دينو ، الذي كانت مهمته القضاء على أوجه القصور في Node.js.


وصل Deno بالفعل إلى الإصدار v0.1 ( ملاحظة المترجم - v0.3.8 بالفعل) وهو على المسار الصحيح نحو هدفه المتمثل في استبدال Node.js في المستقبل.


ما هو الخطأ في Node.js؟


يمكن لأي برنامج كتابة البيانات إلى نظام الملفات أو الشبكة


يمكن أن يؤدي ذلك إلى مخاطر أمنية ، خاصة عند تثبيت حزم npm لم يتم التحقق منها. على سبيل المثال ، كما في حادث crossenv . إذا لم يكن لدى crossenv إذن الكتابة ، فلن يحدث هذا.


مغادرة سريعة واجهات برمجة التطبيقات غير المتزامنة


ظهرت الوعود في Node.js في عام 2009 ، وفي فبراير 2010 اختفت. ومع ذلك ، لا تزال معظم المكتبات تستخدم عمليات الاسترجاعات للعمل مع التعليمات البرمجية غير المتزامنة.


بناء النظام (GYP)


لتجميع وحدة نمطية لتوصيل المكتبات بـ C عبر GYP يعد عذابًا. للحصول على تجربة مطور كافية ، يجب عليك استخدام العقدة gyp (طبقة أعلى GYP) ، وربما طبقات أخرى (مثل nan ). لقد جربت شخصيًا كل ما سبق في مشروعي الصغير ، وأنا مستعد للموافقة ، لقد جعلني أعرق.


وحدة النظام و npm


المشكلة الرئيسية هي أن نظام الوحدة النمطية غير متوافق مع المتصفحات ، مما يعني أن الكود غير متماثل تمامًا. هناك سببان رئيسيان لهذا: تخزين التبعيات في node_modules ووجود package.json.


ما هو دينو؟


"Deno هو وقت تشغيل TypeScript يعتمد على محرك V8 ،"
- ريان دال


نظرًا لأن Typescript هو نسخة موسعة من Javascript ، فإن Deno هي أيضًا بيئة تشغيل لجافا سكريبت.


Deno هو مشروع جديد لـ Ryan Dahl (منشئ Node.js) مصمم لإصلاح أخطاء تصميم Node.js التي تمت مناقشتها أعلاه.


الملامح الرئيسية دينو


سلامة


بشكل افتراضي ، يحظر Deno الإجراءات الحساسة مثل قراءة متغيرات البيئة أو الكتابة إلى نظام الملفات.


تبدأ عملية Deno في وضع غير منقطع ، ومن أجل الوصول إلى البيانات مثل متغيرات البيئة ، يجب تمرير إشارات خاصة.


يتم تعطيل إذن الكتابة إلى نظام الملفات ، وكذلك الأذونات المتعلقة بالبيئة والشبكة. لتمكين هذه الإجراءات ، يجب عليك الاتصال بـ Deno باستخدام الوسائط --allow-write و --allow-net .


يعود كل التفاعل بين عملية Deno المتميزة و v8 إلى الرسائل (المكتوبة سابقًا في Go ، والمنفذة الآن إلى Rust). هذا يسمح لك بإنشاء نقطة واحدة للتحقق من جميع الرسائل.


نظام الوحدة


ننسى package.json و node_modules. عند استيراد الملفات المصدر ، يمكنك تحديد مسار نسبي أو مطلق ، أو عنوان URL الكامل لها:


 import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts" import { log } from "./util.ts" 

بشكل افتراضي ، يتم تخزين جميع الملفات المصدر مؤقتًا. يمكنك استخدام وسيطة - تحميل لتحديث التبعيات. يعمل مثل مفتاح F5 في المستعرض.


دعم TypeScript من خارج الصندوق


يتم دعم TypeScript بواسطة Deno افتراضيًا. ها هو ذا. دون أي شيء. لا تكوينات.


دينو v0.1.4 في العمل


للبدء ، قم بتنزيل ملف Deno الثنائي:


 $ mkdir deno-test && cd deno-test $ wget https://github.com/denoland/deno/releases/download/v0.1.4/deno_linux_x64.gz $ gunzip -c deno_linux_x64.gz > deno $ chmod u+x deno $ ./deno --version deno: 0.1.4 v8: 7.0.247-deno 

الآن قم بإنشاء ملف typescript وقم بتنفيذه:


 function hello(place: string): string { return `Hello ${place}` } console.log(hello('world')) 

 $ ./deno myscript.ts Hello world 

يمكنك أيضًا تجربة الاستيراد عبر URL. الشرط الوحيد هو أن الملف في نهاية عنوان URL يجب أن يحتوي على امتداد .ts.


 import { factorial } from "https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts" console.log(factorial(10)) 

 $ ./deno myimport.ts Downloading https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts 3628800 

أثناء تنفيذ البرنامج النصي ، سيتم تحميل الوحدة النمطية وإضافتها إلى ذاكرة التخزين المؤقت. لتحديث ذاكرة التخزين المؤقت ، يمكنك الاتصال بـ Deno باستخدام وسيطة - reload ، وهو ما يعادل إجراء مفاتيح F5 أو Ctrl + R.


يوجد أدناه مثال أكثر تعقيدًا باستخدام مكتبة axios:


 import axios from "https://gist.githubusercontent.com/DanielRamosAcosta/2f773d815f5434f185c59aec1bab418c/raw/a442cdd8699e39ab9855cbaa571a79049a7b67d4/axios.ts" // Make a request for a user with a given ID axios.get('http://jsonplaceholder.typicode.com/users/1') .then(response => { // handle success console.log("User name:", response.data.name); }) .catch(error => { // handle error console.error("error:", error); }) 

الصيد الوحيد هو أن VSCode لا يمكن تحميل الكتابة عن بعد ، لذلك سوف يظهر الخطأ التالي في المحرر:


An import path cannot end with a '.ts' extension.


لكن الشفرة لا تزال تعمل وتنتج النتيجة الصحيحة:


 ./deno --allow-net axios-test.ts User name: Leanne Graham 

استنتاج


سوف يحتاج Deno إلى الكثير من الوقت لينمو ليصبح أداة عمل كاملة ، لكنني أعتقد أنه يتطور في الاتجاه الصحيح ، ولديه كل فرصة ليصبح وقت تشغيل جافاسكريبت أكثر دقة من Node.js.


شكرا لاهتمامكم!

Source: https://habr.com/ru/post/ar449000/


All Articles