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

notallowall

NotAllow

Posted on May 30, 2020

มาใช้ 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 และมีอะไรที่น่าสนใจอีกครับ หวังว่าบทความนี้จะมีประโยชน์ต่อผู้อ่านนะครับ ขอบคุณที่ยอมอ่านจนจบครับ 😀

💖 💪 🙅 🚩
notallowall
NotAllow

Posted on May 30, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related