ดีพลอยจากซอร์สโค้ด
อัปโหลดโปรเจกต์ JavaScript ได้ทันทีโดยไม่ต้องมี Dockerfile Agent Lab จะตรวจหาเฟรมเวิร์ก บิลด์ให้ และทำเป็นหน้าเว็บหรือแอป
สิ่งที่เกิดขึ้น#
บีบอัดโปรเจกต์เป็น zip โดยให้ package.json อยู่ชั้นบนสุด แล้วอัปโหลด แพลตฟอร์มจะอ่านโปรเจกต์ สร้างแผนการบิลด์ และบิลด์ให้
- โปรเจกต์ที่สร้างเฉพาะไฟล์สำหรับเบราว์เซอร์จะกลายเป็นหน้าเว็บ ให้บริการผ่าน CDN เส้นทางของแอปหน้าเดียว เช่น
/orders/42จะตอบด้วยindex.htmlทั้งหมด - โปรเจกต์ที่รันเซิร์ฟเวอร์จะกลายเป็นแอปคอนเทนเนอร์ บิลด์เป็นอิมเมจที่รันด้วยผู้ใช้ที่ไม่ใช่ root บนพอร์ต 8080
ไม่ต้องเขียน Dockerfile ถ้าโปรเจกต์มี Dockerfile อยู่ชั้นบนสุด จะใช้ไฟล์นั้นแทนการตรวจหา ดูวิธีปิดได้ที่การตั้งค่าการบิลด์
ไม่ต้องใส่สิ่งเหล่านี้ใน zip
node_modules, .git, dist และ .env แพลตฟอร์มติดตั้งแพ็กเกจเอง และจะข้ามไปถ้ามีอยู่
เฟรมเวิร์กที่รองรับ#
| กลายเป็นหน้าเว็บ | กลายเป็นแอป |
|---|---|
| Vite (React, Vue, Svelte), Create React App, Vue CLI | Next.js (ถ้าตั้ง output: "export" จะเป็นหน้าเว็บ) |
| Angular, Astro แบบสแตติก, HTML ที่มีสคริปต์บิลด์ | Nuxt, SvelteKit, Remix, React Router 7, Astro แบบ SSR |
| Express, Fastify, Koa, Hono, NestJS และเซิร์ฟเวอร์ Node อื่น |
npm, pnpm, Yarn และ Bun ตรวจจาก lockfile หรือฟิลด์ packageManager เวอร์ชัน Node.js มาจาก engines.node, .nvmrc หรือ .node-version ถ้าไม่มีจะใช้ LTS ล่าสุด (24) ใช้ได้ 18, 20, 22 และ 24
ตัวแปรสภาพแวดล้อม#
แผนจะแสดงตัวแปรที่โค้ดอ่าน (จาก .env.example, process.env.*, import.meta.env.*) และทำเครื่องหมายตัวที่ดูเหมือนข้อมูลลับ หรือจำเป็นตอนบิลด์ (เช่น VITE_*, NEXT_PUBLIC_*)
- กรอกก่อนดีพลอย: แอปกรอกใน การตั้งค่า › การตั้งค่าการทำงาน (ข้อมูลลับใน ข้อมูลลับ) หน้าเว็บกรอกใน การตั้งค่า › ตัวแปรการบิลด์ เวอร์ชันที่บิลด์จากซอร์สจะแสดงตัวแปรที่โค้ดอ่านแต่ยังไม่ได้ตั้ง
- ตัวแปรจะถูกส่งให้การบิลด์ด้วย ตัวแปรตอนบิลด์จะถูกฝังในหน้าเว็บ จึงห้ามใส่ข้อมูลลับในตัวแปร
VITE_หรือNEXT_PUBLIC_ - ข้อมูลลับจะถูกเมานต์ให้ขั้นตอนติดตั้งและบิลด์ (เช่น โทเคนของรีจิสทรีส่วนตัว) และจะไม่ถูกเขียนลงอิมเมจ
การตั้งค่าการบิลด์#
ถ้าการตรวจหาผิด ให้แก้ใน การตั้งค่า › การตั้งค่าการบิลด์ ช่องที่เว้นว่างจะตรวจหาเอง
| การตั้งค่า | ตัวอย่าง | ตัวแปร |
|---|---|---|
| เวอร์ชัน Node.js | 22 | ALPACK_NODE_VERSION |
| คำสั่งติดตั้ง | npm ci | ALPACK_INSTALL_CMD |
| คำสั่งบิลด์ | npm run build:prod | ALPACK_BUILD_CMD |
| คำสั่งเริ่มทำงาน | node dist/server.js | ALPACK_START_CMD |
| โฟลเดอร์ผลลัพธ์ | dist/browser | ALPACK_OUTPUT_DIR |
| ไม่ใช้ Dockerfile ของโปรเจกต์ | เปิด | ALPACK_IGNORE_DOCKERFILE |
| พาธของแอป | apps/web | — |
ตัวแปรชื่อเดียวกันในการตั้งค่าการทำงานของสาขาจะมีผลเหนือการตั้งค่านี้ ตัวแปร ALPACK_* ใช้กับการบิลด์เท่านั้น และไม่ถูกส่งให้แอปที่กำลังทำงาน
ถ้าตั้งคำสั่งเริ่มทำงานให้โปรเจกต์ที่ตรวจพบว่าเป็นหน้าเว็บ จะกลายเป็นแอป
Monorepo#
ถ้า repository มีหลายโปรเจกต์ ให้อัปโหลดทั้ง repository แล้วตั้ง พาธของแอป ในการตั้งค่าการบิลด์เป็นโฟลเดอร์ของแอป เช่น apps/web แพลตฟอร์มจะตรวจหาและบิลด์ในโฟลเดอร์นั้น ดังนั้น package.json และ lockfile ของโฟลเดอร์นั้นจะกำหนดการบิลด์ แพ็กเกจจากส่วนอื่นของ repository เช่น dependency แบบ workspace:* ยังใช้ไม่ได้
เมื่อการบิลด์ล้มเหลว#
| สิ่งที่เห็น | วิธีแก้ |
|---|---|
| ไม่รู้ว่าจะบิลด์ซอร์สนี้อย่างไร | วาง package.json ไว้ชั้นบนสุดของ zip หรือตั้งคำสั่งเริ่มทำงาน |
| การบิลด์ไม่ได้สร้างไฟล์ใดเลย | ตั้งโฟลเดอร์ผลลัพธ์เป็นที่ที่การบิลด์เขียนไฟล์จริง |
| สิ่งที่อัปโหลดให้แอปเป็นแค่หน้าเว็บ | แอปเปลี่ยนกลับเป็นหน้าเว็บไม่ได้ ให้สร้างแอปใหม่ หรือตั้งคำสั่งเริ่มทำงาน |
| คอมไพล์โมดูลเนทีฟไม่สำเร็จ | คอมมิต lockfile แพลตฟอร์มจะเพิ่มคอมไพเลอร์เมื่อพบแพ็กเกจเนทีฟ |
ดูแต่ละขั้นตอนได้ในบันทึกการบิลด์ของหน้าเวอร์ชัน ถ้าใช้เครื่องมือ AI ให้ขอแผนการบิลด์ก่อน ดูเครื่องมือ MCP