DEV Community

NotAllow
NotAllow

Posted on

มาใช้ Package management สำหรับ deno กันเถอะ

หลังจากที่ผมได้ลองเล่น Deno มาได้สักพักก็ไปนึกถึง npm ที่เป็น Package management แล้วก็มาเจอ Trex ซึ่งอ่านว่าทีเร็กซ์ นั้นเป็นตัวจัดการที่ทำหน้าที่คล้าย npm เลย แต่ก็มีสิ่งที่เราต้องรู้จักก่อนที่จะใช้ Trex นั่นคือ import_map.json

import_map.json

import_map.json คืออะไร ? มันก็คือ ไฟล์ที่ไว้กำหนด import map กับ modules สำหรับ deno แต่ตอนนี้เขาบอกว่ายังไม่ stable แต่ก็ลองมาใช้กันก่อนครับ มาดูข้อจำกัดตอนนี้กัน

  • single import map
  • no fallback URLs
  • ไม่ support std: namespace
  • supports ไฟล์ที่เป็น :, http: และ https: schemes เท่านั้น

มาดูตัวอย่างกัน ในทีนี้ผมจะใช้ framework oak ในการทำ http server นะครับ
ผมสร้างไฟล์ index.ts ตาม code ด้านล่างนี้

import { Application } from 'https://deno.land/x/oak/mod.ts'

const app = new Application()

app.use(ctx => {
  ctx.response.body = 'Hello World!'
})

await app.listen({ port: 4000 })

Enter fullscreen mode Exit fullscreen mode

แต่ถ้าเรากำหนดไฟล์ import_map.json เพื่อการ map modules ที่เราเรียกใช้จะได้ตามนี้ครับ
code สำหรับ import_map.json


{
  "imports": {
    "oak": "https://deno.land/x/oak/mod.ts"
  }
}
Enter fullscreen mode Exit fullscreen mode

แล้วเราก็มาเปลี่ยน code ที่ไฟล์ index.ts ที่ import กันครับจะได้ code ตามตัวอย่างข้างล่างนี้

import { Application } from 'oak'

const app = new Application()

app.use(ctx => {
  ctx.response.body = 'Hello World!'
})

await app.listen({ port: 4000 })

Enter fullscreen mode Exit fullscreen mode

เพียงเท่านี้เราก็จะได้ใช้ import map เรียบร้อยแล้วครับ งั้นมาลองรันกันครับ

วิธีการรัน สิ่งที่จะต้องใช้ตอน deno run คือ

  • --allow-net
  • --importmap=import_map.json (ไว้กำหนดไฟล์ importmap)
  • --unstable (importmap ยังไม่ stable เลยต้องกำหนด permission ว่ารันแบบ unstable)
$ deno run --allow-net --importmap=import_map.json --unstable  index.ts
Enter fullscreen mode Exit fullscreen mode

เมื่อสั่ง deno run จากคำสั่งข้างต้นเสร็จเราลองเรียก http://localhost:4000
ผลลัพธ์ถ้าถูกต้องจะได้ Hello World!

OK ! งั้นต่อมาเรามาใช้ Package management สำหรับ deno กัน สิ่งที่ผมจะใช้คือ Trex นั่นเอง

Trex

Trex
ก่อนอื่นเรามาติดตั้งกันครับ (ใช้ได้สำหรับ deno version 1.0.0 ขึ้นไปเท่านั้น)

$ deno install --allow-read --allow-write --allow-net --allow-run --unstable https://deno.land/x/trex/Trex.ts
Enter fullscreen mode Exit fullscreen mode

หลังจากติดตั้งรองรัน Trex ดูครับโดยการเช็ค Trex version

$ Trex --version
Enter fullscreen mode Exit fullscreen mode

ผลลัพธ์ที่ได้

Trex:
 Version v0.2.0 
 ༼ つ ◕_◕ ༽つ
Enter fullscreen mode Exit fullscreen mode

โอเคน่าจะใช้งานได้แล้วครับ 👍
ก่อนอื่นเราลองลบไฟล์ import_map.json ของเราที่สร้างเองเมื่อสักครู่นี้ก่อนครับ
เมื่อลบแล้วมาติดตั้ง package กัน
คำสั่งก็เหมือน ๆ กับ npm เลยครับ

$ Trex install --map {modules name} // or Trex i --map {modules name}
Enter fullscreen mode Exit fullscreen mode

ผมจะ install oak มาใช้งานนะครับ

$ Trex i --map oak
Enter fullscreen mode Exit fullscreen mode

เมื่อรันเสร็จแล้วก็จะมีไฟล์ import_map.json ที่ Trex ได้สร้างขึ้นมาพร้อมกับ code ที่ map กับ modules
เสร็จแล้วก็ลองรันไฟล์ index.ts ดูครับ

$ deno run --allow-net --importmap=import_map.json --unstable index.ts
Enter fullscreen mode Exit fullscreen mode

เปิด Browser ขึ้นมาเข้า http://localhost:4000 ผลลัพธ์ก็น่าจะได้
Hello World! มานะครับ

จะลบ modules ที่ map ก็แค่ใช้

$ Trex delete {modules name}
Enter fullscreen mode Exit fullscreen mode

สรุป

ข้อดีของ Trex คือสามารถกำหนด import map ให้เราโดยอัตโนมัติให้เรา แต่ถ้าเราไม่ใช้ก็ต้องกำหนด import map ด้วยตัวเอง ยังไงซะหวังว่าอนาคตน่าจะ stable และมีอะไรที่น่าสนใจอีกครับ หวังว่าบทความนี้จะมีประโยชน์ต่อผู้อ่านนะครับ ขอบคุณที่ยอมอ่านจนจบครับ 😀

Top comments (0)