แพลตฟอร์ม Deno JavaScript เข้ากันได้กับโมดูล NPM

Deno 1.28 เปิดตัวแล้ว ซึ่งเป็นเฟรมเวิร์กสำหรับแซนด์บ็อกซ์ JavaScript และแอปพลิเคชัน TypeScript ที่สามารถใช้ในการสร้างตัวจัดการฝั่งเซิร์ฟเวอร์ แพลตฟอร์มดังกล่าวได้รับการพัฒนาโดย Ryan Dahl ผู้สร้าง Node.js เช่นเดียวกับ Node.js Deno ใช้เครื่องมือ V8 JavaScript ซึ่งใช้ในเบราว์เซอร์ที่ใช้ Chromium เช่นกัน ในเวลาเดียวกัน Deno ไม่ใช่ทางแยกของ Node.js แต่เป็นโครงการใหม่ที่สร้างขึ้นตั้งแต่เริ่มต้น รหัสโครงการเผยแพร่ภายใต้ใบอนุญาต MIT บิลด์ต่างๆ เตรียมไว้สำหรับ Linux, Windows และ macOS

โครงการ Deno ถูกสร้างขึ้นเพื่อให้ผู้ใช้มีสภาพแวดล้อมที่ปลอดภัยยิ่งขึ้น และกำจัดข้อผิดพลาดทางแนวคิดในสถาปัตยกรรม Node.js เพื่อปรับปรุงความปลอดภัย เอ็นจิ้น V8 เขียนด้วยภาษา Rust ซึ่งหลีกเลี่ยงช่องโหว่มากมายที่เกิดจากการจัดการหน่วยความจำระดับต่ำ ในการประมวลผลคำขอในโหมดไม่บล็อก จะใช้แพลตฟอร์ม Tokio ซึ่งเขียนด้วยภาษา Rust เช่นกัน Tokio อนุญาตให้คุณสร้างแอปพลิเคชันประสิทธิภาพสูงตามสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ รองรับมัลติเธรดและประมวลผลคำขอเครือข่ายในโหมดอะซิงโครนัส

การเปลี่ยนแปลงที่สำคัญในรีลีสใหม่คือการรักษาเสถียรภาพของความเข้ากันได้กับแพ็คเกจที่โฮสต์ในพื้นที่เก็บข้อมูล NPM ซึ่งช่วยให้ Deno สามารถใช้โมดูลมากกว่า 1.3 ล้านโมดูลที่สร้างขึ้นสำหรับแพลตฟอร์ม Node.js ตัวอย่างเช่น ขณะนี้แอปพลิเคชันที่ใช้ Deno สามารถใช้โมดูลการเข้าถึงข้อมูลแบบถาวร เช่น Prisma, Mongoose และ MySQL รวมถึงเฟรมเวิร์กส่วนหน้า เช่น React และ Vue โมดูล NPM บางตัวยังคงเข้ากันไม่ได้กับ Deno เช่น เนื่องจากการเชื่อมโยงกับองค์ประกอบสภาพแวดล้อมเฉพาะของ Node.js เช่น ไฟล์ package.json ยังไม่สามารถใช้คำสั่ง "deno คอมไพล์" กับโมดูล 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- vite-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() และ Deno APIs .uid() เพิ่ม API Deno.Command() ที่ไม่เสถียรใหม่สำหรับการรันคำสั่ง (การแทนที่สากลสำหรับ Deno.spawn, Deno.spawnSync และ Deno.spawnChild)

คุณสมบัติหลักของเดโน่:

  • การกำหนดค่าเริ่มต้นที่มุ่งเน้นความปลอดภัย การเข้าถึงไฟล์ เครือข่าย และการเข้าถึงตัวแปรสภาพแวดล้อมจะถูกปิดใช้งานตามค่าเริ่มต้น และจะต้องเปิดใช้งานอย่างชัดเจน โดยค่าเริ่มต้น แอปพลิเคชันจะทำงานในสภาพแวดล้อมแบบแซนด์บ็อกซ์แบบแยก และไม่สามารถเข้าถึงความสามารถของระบบโดยไม่ได้รับสิทธิ์ที่ชัดเจน
  • การสนับสนุน TypeScript ในตัวนอกเหนือจาก JavaScript สำหรับการตรวจสอบประเภทและการสร้าง JavaScript จะใช้คอมไพลเลอร์ TypeScript มาตรฐาน ซึ่งทำให้ประสิทธิภาพลดลงเมื่อเทียบกับการแยกวิเคราะห์ JavaScript ใน V8
  • รันไทม์มาในรูปแบบของไฟล์ปฏิบัติการที่มีอยู่ในตัวเองไฟล์เดียว ("deno") ในการรันแอปพลิเคชันโดยใช้ Deno คุณเพียงแค่ต้องดาวน์โหลดไฟล์ปฏิบัติการหนึ่งไฟล์สำหรับแพลตฟอร์มของคุณ ซึ่งมีขนาดประมาณ 30 MB ซึ่งไม่มีการพึ่งพาภายนอก และไม่จำเป็นต้องติดตั้งพิเศษใดๆ บนระบบ ยิ่งไปกว่านั้น deno ไม่ใช่แอปพลิเคชันเสาหิน แต่เป็นชุดของแพ็คเกจ Rust crate (deno_core,rusty_v8) ซึ่งสามารถใช้แยกกันได้
  • เมื่อเริ่มต้นโปรแกรมรวมทั้งโหลดโมดูลคุณสามารถใช้การกำหนดที่อยู่ URL ได้ ตัวอย่างเช่น หากต้องการรันโปรแกรมยินดีต้อนรับ 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)
  • สคริปต์แอปพลิเคชันทั้งหมดสามารถรวมเป็นไฟล์ JavaScript เดียวได้

ที่มา: opennet.ru

เพิ่มความคิดเห็น