zinnector dev รัน WordPress จริงบนเครื่องของคุณเอง โดยให้บริการปลั๊กอินและธีมในโปรเจกต์ของคุณ พร้อมเวอร์ชัน PHP ที่คุณเลือก บทความนี้จะอธิบายถึงรันไทม์สองตัวที่สามารถใช้ได้ วิธีเลือกเวอร์ชัน สิ่งใดที่ถูกให้บริการจากที่ไหน และตำแหน่งที่รันไทม์อยู่บนดิสก์ เพื่อให้สิ่งที่คุณทดสอบในเครื่องตรงกับสิ่งที่คุณนำไปปรับใช้จริง
รันไทม์ทั้งสองตัว และเหตุผลที่ทั้งคู่เป็นของจริง
Playground คือค่าเริ่มต้น WordPress Playground คอมไพล์ PHP ให้เป็น WebAssembly และรันภายใน Node ดังนั้นแล็ปท็อปที่ไม่ได้ติดตั้งอะไรเลยนอกจาก Node ก็สามารถบูต WordPress ได้ในไม่กี่วินาที มี PHP ให้เลือกตั้งแต่เวอร์ชัน 5.2 ถึง 8.5 รันไทม์นี้มาพร้อมกับส่วนขยาย PHP ชุดเล็ก (intl, redis, memcached ตามที่วัดในบิลด์ปัจจุบัน) ซึ่งเพียงพอสำหรับงานปลั๊กอินและธีมส่วนใหญ่
Docker รันคอนเทนเนอร์ php-fpm และ MariaDB ดั้งเดิม ตัวนี้ทำงานช้ากว่า ต้องใช้ Docker daemon และรูปภาพขนาดประมาณ 1.2 GB รวมถึงรองรับ PHP 7.4 ถึง 8.5 แต่ก็รัน PHP ดั้งเดิมพร้อมชุดส่วนขยายเต็มรูปแบบ รวมถึง imagick และ gd นี่คือคำตอบที่แท้จริงเมื่อสิ่งที่คุณจำเป็นต้องทดสอบคือส่วนขยายที่บิลด์ WebAssembly ไม่มีมาให้
zinnector dev # playground
zinnector dev --runtime docker # PHP ดั้งเดิม + MariaDB
จะไม่มีการสลับกลับไปใช้ Docker แบบเงียบ ๆ โดยเด็ดขาด นักพัฒนาที่คิดว่าตนเองกำลังใช้งานอยู่บน WebAssembly แต่แท้จริงแล้วอยู่บน Docker ถือว่าได้รับผลลัพธ์ที่ไม่ถูกต้องจากเครื่องมือที่พยายามให้ความช่วยเหลือ ดังนั้นจึงต้องระบุชื่อเพื่อเรียกใช้เสมอ
การเลือกเวอร์ชัน PHP และ WordPress
zinnector dev --php 8.1 --wp 6.7 # พัฒนาโดยอิงตามคู่เวอร์ชันที่เฉพาะเจาะจง
zinnector dev --port 9401 # เมื่อพอร์ต 9400 ถูกใช้งานอยู่
zinnector dev --no-login # ไม่ต้องลงชื่อเข้าสู่ wp-admin โดยอัตโนมัติ
zinnector dev --verbose # แสดงเอาต์พุตของรันไทม์เอง
ค่าเริ่มต้นมาจาก zinnector.json ภายในโปรเจกต์ — ได้แก่ php, wordpress, runtime และ port — ซึ่ง zinnector new เขียนขึ้นและคุณควรคอมมิต เพื่อให้นักพัฒนาทุกคนในโปรเจกต์รันเวอร์ชันเดียวกัน แฟล็กบนบรรทัดคำสั่งจะมีความสำคัญเหนือกว่าไฟล์สำหรับการรันครั้งนั้น
เวอร์ชันที่คุณประกาศและเวอร์ชันที่รันจริงเป็นข้อเท็จจริงที่ต่างกัน คำสั่ง zinnector dev --once จะบูตรันไทม์ พิมพ์สิ่งที่รายงานจริง — เวอร์ชัน PHP, เวอร์ชัน WordPress, ส่วนขยายที่โหลด — แล้วหยุดการทำงาน คำสั่ง zinnector check --probe ใช้การวัดแบบเดียวกันนี้เมื่อเปรียบเทียบโปรเจกต์ของคุณกับสล็อตของโฮสติง
สิ่งใดที่ถูกให้บริการจากโปรเจกต์ของคุณ
รันไทม์จะเมานต์ไดเรกทอรี wp-content/plugins, wp-content/themes และ wp-content/mu-plugins ของโปรเจกต์คุณโดยตรง ดังนั้นไฟล์ที่คุณบันทึกจะแสดงผลทันทีในการรีโหลดครั้งถัดไป ไดเรกทอรีที่มีอยู่แต่ไม่มีเนื้อหาจริงจะไม่ถูกเมานต์โดยเจตนา: ไดเรกทอรี themes/ ที่ว่างเปล่าซึ่งถูกเมานต์ทับธีมของรันไทม์เองจะทำให้ WordPress ไม่มีธีมเลย ซึ่งจะส่งผลให้เกิดหน้าว่าง 500 แทนที่จะเป็นไซต์ของคุณ นั่นคือสาเหตุที่โครงสร้างโปรเจกต์คงไดเรกทอรีว่างไว้ด้วยไฟล์ .gitkeep และเหตุใดไดเรกทอรีเหล่านั้นจึงไม่บดบังสิ่งใดจนกว่าคุณจะวางธีมลงไป
ตำแหน่งที่รันไทม์จัดเก็บอยู่
รันไทม์ของ WordPress จะถูกดาวน์โหลดเมื่อใช้งานครั้งแรกแทนที่จะจัดส่งมาพร้อมกับ CLI — แพ็กเกจที่รวมบิลด์ PHP ทั้งหมดมีขนาดประมาณ 570 MB และนักพัฒนาที่เพียงแค่แสดงรายการไซต์ไม่ควรต้องรับภาระในส่วนนี้ มันจะถูกเก็บไว้ในแคชของ Zinnector® เองที่ ~/.cache/zinnector/runtimes/playground/<version> (หรือที่ใดก็ตามที่ ZINNECTOR_CACHE_DIR ชี้ไป) และจะไม่เก็บไว้ในโปรเจกต์ของคุณ ดังนั้นจึงไม่สามารถหลุดเข้าไปในที่เก็บโค้ดของคุณหรือในโครงสร้างไดเรกทอรีที่ zinnector push ทำการวัดได้ การดาวน์โหลดดำเนินการโดย npm ของคุณเอง ซึ่งรันในรูปแบบ node npm-cli.js — โดยไม่ผ่านเชลล์เด็ดขาด
เวอร์ชันของรันไทม์จะถูกตรึงไว้กับเวอร์ชันของ CLI ดังนั้นนักพัฒนาสองคนในโปรเจกต์เดียวกันจึงรันบิลด์ PHP เดียวกัน คำสั่ง zinnector dev --reset-runtime จะลบรันไทม์ที่ติดตั้งไว้ออกและติดตั้งใหม่อีกครั้ง ซึ่งเป็นการแก้ไขสำหรับรันไทม์ที่ติดตั้งแล้วแต่ไม่ยอมบูต
บน Node 26 หรือใหม่กว่า
CLI เองสามารถทำงานได้บน Node เวอร์ชัน 24 ขึ้นไป อย่างไรก็ตาม โมดูลเนทีฟของรันไทม์จะจัดส่งไบนารีที่สร้างไว้ล่วงหน้าสำหรับ Node 24 และ 25 เท่านั้น (ณ กันยายน 2026) แทนที่จะต้องคอมไพล์สิ่งใดก็ตาม — ซึ่งบน Windows หมายถึงการติดตั้ง Visual Studio — Zinnector® จะดึง Node 24 สำหรับรันไทม์โดยเฉพาะ ขนาดประมาณ 30 MB ซึ่งได้รับการตรวจสอบความถูกต้องกับเช็กซัมที่ nodejs.org เผยแพร่ มาไว้ในแคชเดียวกัน ข้อความแจ้งเตือนการติดตั้งจะระบุเช่นนั้นเมื่อมีผลบังคับใช้ จะไม่มีการเปลี่ยนแปลงใด ๆ กับ Node ของคุณเอง
ข้อมูลที่เกี่ยวข้อง