zinnector dev chạy một phiên bản WordPress thực tế ngay trên máy của quý khách, cung cấp các plugin và theme trong dự án của quý khách với phiên bản PHP mà quý khách lựa chọn. Bài viết này giải thích về hai runtime mà lệnh có thể sử dụng, cách chọn phiên bản, nội dung nào được phân phát từ đâu, và vị trí của runtime trên ổ đĩa — để những gì quý khách kiểm thử cục bộ hoàn toàn khớp với những gì quý khách triển khai.
Hai runtime, và lý do vì sao cả hai đều là môi trường thực tế
Playground là lựa chọn mặc định. WordPress Playground biên dịch PHP sang WebAssembly và chạy trực tiếp bên trong Node, do đó một máy tính xách tay không cài đặt gì ngoài Node vẫn có thể khởi động một phiên bản WordPress chỉ trong vài giây. Mọi phiên bản PHP từ 5.2 đến 8.5 đều khả dụng. Runtime này đi kèm một bộ extension PHP nhỏ gọn (intl, redis, memcached theo như đo lường trên bản dựng hiện tại), đáp ứng đủ cho hầu hết các công việc xử lý plugin và theme.
Docker chạy các container php-fpm và MariaDB gốc. Phương pháp này chậm hơn, yêu cầu Docker daemon cùng khoảng 1,2 GB image, đồng thời hỗ trợ PHP 7.4 đến 8.5 — nhưng chạy một phiên bản PHP gốc với đầy đủ bộ extension, bao gồm imagick và gd. Đây là giải pháp chân thực khi những gì quý khách cần kiểm thử là một extension mà bản dựng WebAssembly không hỗ trợ.
zinnector dev # playground
zinnector dev --runtime docker # PHP gốc + MariaDB
Hệ thống không bao giờ tự ý chuyển ngầm về Docker. Một nhà phát triển nghĩ rằng mình đang thao tác trên WebAssembly nhưng thực tế lại đang chạy trên Docker là do công cụ đã đưa ra phản hồi sai khi cố gắng hỗ trợ, vì vậy runtime này bắt buộc phải được chỉ định rõ theo tên.
Lựa chọn các phiên bản PHP và WordPress
zinnector dev --php 8.1 --wp 6.7 # phát triển dựa trên một cặp phiên bản cụ thể
zinnector dev --port 9401 # khi cổng 9400 đã được sử dụng
zinnector dev --no-login # không tự động đăng nhập vào wp-admin
zinnector dev --verbose # hiển thị đầu ra riêng của runtime
Các giá trị mặc định được lấy từ tệp zinnector.json trong dự án — php, wordpress, runtime và port — do lệnh zinnector new tạo ra và quý khách nên commit tệp này, để mọi người trong dự án đều chạy cùng các phiên bản như nhau. Cờ được truyền trên dòng lệnh sẽ ghi đè cấu hình trong tệp đối với lượt chạy đó.
Phiên bản quý khách khai báo và phiên bản thực sự chạy là hai thông tin khác nhau. zinnector dev --once sẽ khởi động runtime, in ra những gì runtime thực sự báo cáo — phiên bản PHP, phiên bản WordPress, các extension đã tải — rồi dừng lại. zinnector check --probe cũng sử dụng cùng phép đo lường đó khi so sánh dự án của quý khách với một vị trí lưu trữ hosting.
Nội dung nào được phân phát từ dự án của quý khách
Runtime gắn kết trực tiếp các thư mục wp-content/plugins, wp-content/themes và wp-content/mu-plugins từ dự án của quý khách, do đó tệp mà quý khách lưu sẽ có hiệu lực ngay trong lần tải lại trang tiếp theo. Các thư mục tồn tại nhưng không chứa nội dung thực sự sẽ có chủ đích không được gắn kết: một thư mục themes/ trống được gắn kết đè lên các theme riêng của runtime sẽ khiến WordPress hoàn toàn không có theme nào, dẫn đến lỗi 500 trang trắng thay vì hiển thị trang web của quý khách. Đó là lý do vì sao cấu trúc khung giữ lại các thư mục trống kèm tệp .gitkeep và chúng sẽ không che khuất bất kỳ thành phần nào cho đến khi quý khách đặt một theme vào đó.
Vị trí lưu trữ của runtime
Runtime của WordPress được tải xuống trong lần sử dụng đầu tiên thay vì đi kèm sẵn với CLI — gói chứa toàn bộ các bản dựng PHP có dung lượng khoảng 570 MB, và một nhà phát triển chỉ có nhu cầu liệt kê các trang web không cần phải chịu tải dung lượng này. Gói được lưu trữ trong bộ nhớ đệm riêng của Zinnector®, tại ~/.cache/zinnector/runtimes/playground/<version> (hoặc bất kỳ nơi nào ZINNECTOR_CACHE_DIR trỏ tới), tuyệt đối không nằm trong dự án của quý khách, do đó nó không thể xuất hiện trong kho lưu trữ hay trong cấu trúc cây thư mục mà zinnector push đo lường. Quá trình tải xuống được thực hiện bởi chính npm của quý khách, chạy dưới dạng node npm-cli.js — không bao giờ thông qua shell.
Phiên bản runtime được cố định theo phiên bản CLI, đảm bảo hai nhà phát triển trên cùng một dự án đều chạy các bản dựng PHP giống hệt nhau. zinnector dev --reset-runtime sẽ xóa bỏ runtime đã cài đặt và tiến hành cài đặt lại, đây là giải pháp khắc phục cho một runtime đã cài đặt thành công nhưng không thể khởi động.
Trên Node 26 hoặc mới hơn
Bản thân CLI có thể chạy trên bất kỳ phiên bản Node nào từ 24 trở lên. Tuy nhiên, module gốc của runtime chỉ cung cấp các bản nhị phân dựng sẵn cho Node 24 và 25 (tính đến tháng 9 năm 2026). Thay vì biên dịch bất kỳ thành phần nào — điều mà trên Windows đồng nghĩa với việc phải cài đặt Visual Studio — Zinnector® sẽ tải riêng một phiên bản Node 24 chỉ dành cho runtime, dung lượng khoảng 30 MB, đã được xác minh đối chiếu với mã tổng kiểm do nodejs.org công bố, vào cùng bộ nhớ đệm đó. Lời nhắc cài đặt sẽ thông báo rõ ràng khi trường hợp này xảy ra. Không có bất kỳ thay đổi nào tác động đến phiên bản Node riêng của quý khách.
Liên quan