Skip to content
Grok

Vite Build Configuration API

Vite มีตัวเลือกการ build มากมายที่ช่วยให้คุณปรับแต่งการ build แอปพลิเคชันของคุณได้อย่างละเอียด ในส่วนนี้เราจะมาดูตัวเลือกต่างๆ ที่มีให้ใช้งาน

build.target

ระบุสภาพแวดล้อมเป้าหมายสำหรับการ build ทั้งเวอร์ชัน JavaScript และเบราว์เซอร์ ช่วยควบคุมความเข้ากันได้ของโค้ดที่ถูก build ออกมา

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // ระบุเวอร์ชันของเบราว์เซอร์ที่ต้องการรองรับ
    target: "es2020",

    // หรือระบุเป็น array ของ targets
    target: ["es2020", "chrome58", "edge16", "firefox57", "safari11"],

    // หรือใช้ 'modules' สำหรับการรองรับ ES modules
    target: "modules",
  },
});

คำอธิบายเพิ่มเติม:

  • ใช้สำหรับระบุเวอร์ชันของ JavaScript ที่ต้องการรองรับ
  • ค่าเริ่มต้นคือ 'modules' ซึ่งจะสร้างโค้ดที่เข้ากันได้กับ ES modules
  • รองรับการระบุเป็น string หรือ array ของ targets

build.outDir

ระบุไดเรกทอรีที่ใช้สำหรับไฟล์ที่ build แล้ว ควรแยกจากโค้ดต้นฉบับเพื่อความสะดวกในการจัดการ

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // ระบุชื่อโฟลเดอร์ที่ต้องการ
    outDir: "dist",

    // สามารถระบุ path แบบเต็มได้
    outDir: path.resolve(__dirname, "build"),
  },
});

คำแนะนำ:

  • ควรเก็บไฟล์ build ไว้ในโฟลเดอร์ที่แยกจากโค้ดต้นฉบับ
  • ระวังการลบไฟล์ในโฟลเดอร์นี้เมื่อใช้ build.emptyOutDir: true

build.assetsDir

ระบุไดเรกทอรีย่อยสำหรับเก็บ static assets ช่วยจัดระเบียบไฟล์ที่ถูก build ออกมา

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // ระบุชื่อโฟลเดอร์สำหรับ assets
    assetsDir: "assets",

    // ใช้ string เปล่าเพื่อเก็บไฟล์ที่ root
    assetsDir: "",
  },
});

build.assetsInlineLimit

กำหนดขนาดไฟล์สูงสุดที่จะถูกแปลงเป็น base64 ช่วยลดจำนวน request สำหรับไฟล์ขนาดเล็ก

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // ไฟล์ที่เล็กกว่า 4KB จะถูกแปลงเป็น base64
    assetsInlineLimit: 4096,

    // ตั้งค่าเป็น 0 เพื่อปิดการแปลงเป็น inline
    assetsInlineLimit: 0,
  },
});

build.cssCodeSplit

เปิด/ปิดการแยก CSS ออกเป็นไฟล์แยก ช่วยให้โหลด CSS ได้อย่างมีประสิทธิภาพมากขึ้น

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // เปิดการแยก CSS (ค่าเริ่มต้น: true)
    cssCodeSplit: true,
  },
});

build.sourcemap

สร้าง source maps สำหรับการดีบัก ช่วยให้ติดตามปัญหาในโค้ดต้นฉบับได้ง่ายขึ้น

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // สร้าง source maps (ค่าเริ่มต้น: false)
    sourcemap: true,

    // หรือระบุประเภทของ source map
    sourcemap: "inline", // หรือ 'hidden'

    // สำหรับ production อาจใช้ 'hidden-source-map'
    sourcemap: process.env.NODE_ENV === "production" ? "hidden" : true,
  },
});

build.rollupOptions

กำหนดค่าเพิ่มเติมสำหรับ Rollup ช่วยปรับแต่งขั้นตอนการ build ให้ละเอียดยิ่งขึ้น

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    rollupOptions: {
      // ระบุ entry points
      input: {
        main: "index.html",
        about: "about.html",
      },

      // กำหนด output options
      output: {
        entryFileNames: "js/[name].[hash].js",
        chunkFileNames: "js/[name].[hash].js",
        assetFileNames: "assets/[name].[hash][ext]",
      },

      // ระบุ external dependencies
      external: ["some-external-dependency"],
    },
  },
});

build.minify

เปิด/ปิดการ minify หรือระบุ minifier ที่ต้องการใช้ ช่วยลดขนาดไฟล์สำหรับ production

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // เปิด/ปิดการ minify (ค่าเริ่มต้น: 'esbuild')
    minify: "esbuild", // หรือ 'terser' หรือ 'false'

    // หรือระบุเป็น boolean
    minify: process.env.NODE_ENV === "production",
  },
});

build.terserOptions

กำหนดค่าเพิ่มเติมสำหรับ Terser ช่วยปรับแต่งกระบวนการ minify ให้เฉพาะเจาะจง

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    minify: "terser",
    terserOptions: {
      compress: {
        // ลบ console.log ใน production
        drop_console: process.env.NODE_ENV === "production",
        drop_debugger: true,
      },
      format: {
        // เก็บ comments บางส่วน
        comments: "some",
      },
      mangle: {
        // ระบุชื่อที่ต้องการคงไว้
        reserved: ["SomeGlobal"],
      },
    },
  },
});

build.emptyOutDir

ลบเนื้อหาใน outDir ก่อน build ใหม่

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // ลบไฟล์ใน outDir ก่อน build (ค่าเริ่มต้น: true)
    emptyOutDir: true,
  },
});

build.reportCompressedSize

แสดงขนาดไฟล์ที่บีบอัดแล้วใน console

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // แสดงขนาดไฟล์ที่บีบอัดแล้ว (ค่าเริ่มต้น: true)
    reportCompressedSize: true,
  },
});

build.chunkSizeWarningLimit

กำหนดขนาดไฟล์ (ใน KB) ที่จะแสดงคำเตือนเมื่อมี chunk ใหญ่เกินไป

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // แสดงคำเตือนเมื่อมี chunk ใหญ่กว่า 1000KB (ค่าเริ่มต้น: 500)
    chunkSizeWarningLimit: 1000,
  },
});

build.watch

เปิดโหมด watch สำหรับการพัฒนา

ts
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    // เปิดโหมด watch (ค่าเริ่มต้น: false)
    watch: {},
  },
});