vue3、vite 和 ElementPlus 專案建置

安裝流程open in new window

# node -v //16.13.0
# npm -v //8.1.0

npm create vite@latest

cd ${folder-name}

npm install

npm run dev

啟動結果

vite.config.jsopen in new window

這個設定屬性有插件(plugin)、打包配置(build)、樣式(css)、開發(server)等配置。 以下範例是在專案中使用了 vue3 和ElementPlusopen in new window、根據不同 mode 參數在打包時做 base 路徑的調整、也在 css 部份加入 sass(這能讓.vue 檔 lang='scss'被解析)。

import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import path from "path";

export default ({ mode }) => {
  return defineConfig({
    base:
      loadEnv(mode, process.cwd()).VITE_PROJECT_ENV === "stage"
        ? `/${loadEnv(mode, process.cwd()).VITE_PROJECT_NAME}/`
        : "/",
    resolve: {
      alias: {
        "@": path.resolve(__dirname, "src"),
      },
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "@/assets/styles/elementPlusInit.scss" as *;`,
        },
      },
    },
    plugins: [
      vue(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [
          ElementPlusResolver({
            importStyle: "sass",
            // directives: true,
            // version: "1.2.0-beta.1",
          }),
        ],
      }),
    ],
    build: {
      chunkSizeWarningLimit: 1600,
    },
    server: {
      host: "0.0.0.0",
      port: 3000,
    },
  });
};

對應在 package.json 的腳本,腳本帶的參數 mode 可讓 vite.config.js 使用。

{
  "scripts": {
    "dev": "vite",
    "stage": "vite --mode stage",
    "build-stage": "vite build  --mode stage",
    "build": "vite build"
  }
}

WARNING

在 elementPlus 要複寫既有的樣式定義,可以參照官網open in new window寫法複寫,而在 vite.config.js 中的設定,是讓這個複寫的 scss 檔能都引入到各個元件。

/*  elementPlusInit.scss */
@forward "element-plus/theme-chalk/src/common/var.scss" with (
  $colors: (
    "primary": (
      "base": #3bb071
    )
  )
);

實際專案