Skip to content

Hooks

โดยค่าเริ่มต้น Volta จะดึง Node, npm และ Yarn จากแหล่งและ registry สาธารณะ (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com) อย่างไรก็ตาม ขึ้นอยู่กับสภาพแวดล้อมของคุณ อาจจำเป็นต้องบอก Volta ให้ดาวน์โหลดจากแหล่งอื่นแทน (เช่น npm Enterprise สำหรับเครื่องมือภายใน) เพื่อรองรับความต้องการนั้น Volta จึงมี hooks เข้าไปในกระบวนการดาวน์โหลด

ระบุ hooks ที่ไหน

Hooks จะถูกตั้งค่าในไฟล์ที่ชื่อ hooks.json เสมอ ไฟล์นี้สามารถอยู่ในสองตำแหน่ง ขึ้นอยู่กับขอบเขตที่คุณต้องการให้ hooks เหล่านั้นมีผล:

  • Hooks ที่ระบุในโฟลเดอร์ Volta (~/.volta/hooks.json บน Linux/MacOS, %LOCALAPPDATA%\Volta\hooks.json บน Windows) จะใช้กับทั้งระบบ
  • Hooks ที่ระบุในโฟลเดอร์ย่อย .volta ของโปรเจกต์ (<PROJECT ROOT>/.volta/hooks.json) จะใช้เฉพาะภายในโปรเจกต์นั้นเท่านั้น <PROJECT ROOT> ในที่นี้หมายถึงตำแหน่งของ package.json ของโปรเจกต์นั้น

รูปแบบไฟล์ Hooks

เนื้อหาของ hooks.json ต้องเป็นออบเจกต์ โดยมีคีย์ที่ไม่บังคับสำหรับเครื่องมือแต่ละประเภท (ปัจจุบันคือ node, npm และ yarn) เครื่องมือแต่ละอย่างมี 3 การกระทำที่สามารถใช้ hook ได้แต่ละอย่าง:

  • index แทน URL ที่ใช้กำหนดรายการเวอร์ชันที่สามารถดาวน์โหลดได้สำหรับเครื่องมือเหล่านั้น ผลลัพธ์จากการเข้าถึง URL นั้นต้องตรงกับรูปแบบของดัชนีสาธารณะสำหรับเครื่องมือที่เลือก
  • latest แทน URL ที่ใช้กำหนดเวอร์ชันล่าสุดของเครื่องมือเหล่านั้น สำหรับ node ผลลัพธ์ควรมีรูปแบบเดียวกับ index โดยตรวจสอบให้แน่ใจว่าเวอร์ชันล่าสุดเป็นองค์ประกอบแรกในรายการ สำหรับ yarn ผลลัพธ์ควรเป็นสตริงหมายเลขเวอร์ชันดิบๆ เท่านั้น
  • distro แทน URL ที่ใช้ดาวน์โหลดไบนารีของเครื่องมือ

สุดท้าย แต่ละการกระทำมี 3 hooks ที่เป็นไปได้ (อธิบายด้านล่าง) ที่สามารถใช้ได้ (สามารถระบุได้เพียงหนึ่งเดียวสำหรับการกระทำแต่ละอย่างในเวลาใดก็ตาม) ตัวอย่างไฟล์ hooks.json:

json
{
    "node": {
        "index": {
            "bin": "/usr/local/node-lookup"
        },
        "latest": {
            "prefix": "http://example.com/node/"
        },
        "distro": {
            "template": "http://example.com/{{os}}/{{arch}}/node-{{version}}.tar.gz"
        }
    },
    "npm": {
        "index": {
            "prefix": "http://example.com/npm/"
        },
        "latest": {
            "bin": "~/npm-latest"
        },
        "distro": {
            "template": "http://example.com/npm/npm-{{version}}.tgz"
        }
    },
    "yarn": {
        "index": {
            "template": "http://example.com/yarn/{{os}}/{{arch}}/yarn-{{version}}.tgz"
        },
        "latest": {
            "prefix": "http://example.com/yarnpkg/"
        },
        "distro": {
            "bin": "~/yarn-distro"
        }
    }
}

ประเภท Hook

prefix Hooks

Hook แบบ prefix คือการแทนที่ URL อย่างง่าย URL จะถูกสร้างโดยใช้ prefix ที่ระบุ ตามด้วยชื่อไฟล์สาธารณะสำหรับการกระทำนั้น ตัวอย่างเช่น ใช้ hooks.json ข้างต้น เรามี hook แบบ prefix ที่ระบุสำหรับการกำหนดเวอร์ชัน yarn ล่าสุด โดยค่าเริ่มต้น Volta จะดึงเวอร์ชันล่าสุดโดยการร้องขอไปที่ https://yarnpkg.com/latest-version โดยใช้ hook แทนที่ Volta จะพยายามเข้าถึง http://example.com/yarnpkg/latest-version โดยเติม latest-version ต่อจาก prefix ที่ระบุของ http://example.com/yarnpkg/

template Hooks

Hook แบบ template ช่วยให้คุณสามารถระบุเทมเพลตสำหรับ URL ได้ โดยมี wildcard ที่จะถูกแทนที่ wildcard ที่ใช้ได้มีดังนี้:

  • จะถูกแทนที่ด้วย darwin, linux หรือ win ขึ้นอยู่กับระบบปฏิบัติการ
  • จะถูกแทนที่ด้วย x86 หรือ x64 ขึ้นอยู่กับสถาปัตยกรรมของระบบ
  • (ใช้ได้เฉพาะการกระทำ distro เท่านั้น) จะถูกแทนที่ด้วยเวอร์ชันเฉพาะของเครื่องมือที่ Volta พยายามดาวน์โหลด
  • จะถูกแทนที่ด้วยชื่อไฟล์ที่ Volta จะดาวน์โหลดจาก registry สาธารณะ
  • (ใช้ได้เฉพาะการกระทำ distro เท่านั้น) จะถูกแทนที่ด้วยส่วนขยายไฟล์ที่ Volta คาดหวังที่จะดาวน์โหลด

TIP

การแทนที่ filename และ ext มีให้ใช้ใน Volta 0.8.4 ขึ้นไปเท่านั้น

ใช้ hook node.distro จากตัวอย่างข้างต้น เมื่อดึง node@10.15.3 บนระบบ Linux 64-bit Volta จะพยายามดาวน์โหลด tarball จาก: http://example.com/linux/x64/node-10.15.3.tar.gz

bin Hooks

Hook แบบ bin คือ hook อเนกประสงค์ที่จะเรียกสคริปต์ภายนอกเพื่อกำหนด URL ค่าคือพาธไปยังสคริปต์ที่เรียกใช้ได้ซึ่งจะถูกเรียก และ URL จะถูกอ่านจาก stdout ของสคริปต์นั้น stderr ของสคริปต์จะแสดงให้ผู้ใช้เห็น ดังนั้นจึงสามารถใช้แสดงแถบความคืบหน้าหรือ spinner รอได้หากต้องการ หากพาธไปยังสคริปต์เป็นพาธสัมพัทธ์ จะถูกแก้ไข relatif กับไฟล์ hooks.json ที่ระบุ ในบริบทนี้ พาธสัมพัทธ์หมายความว่าพาธเริ่มต้นด้วย ./ หรือ ../ บน Linux/MacOS และเริ่มต้นด้วย .\ หรือ ..\ บน Windows สุดท้าย สำหรับ hook การกระทำ distro เวอร์ชันของเครื่องมือที่ร้องขอจะถูกส่งเป็นอาร์กิวเมนต์แรกไปยังสคริปต์นั้น

ใช้ hook yarn.distro จากตัวอย่าง hooks.json เมื่อดึง yarn@1.13.0 Volta จะเรียก ~/yarn-distro "1.13.0" และพยายามดาวน์โหลด tarball จาก URL ที่ส่งคืนโดย hook นั้น

Released under the BSD 2-Clause License.