Vite 設定開發環境與正式環境使用不同的 G-tag

PM 開了一項需求,希望在開發環境與正式部屬環境使用不同的 Google-Analytics 的評估碼 g-tag,之前在開發的時候都是寫死的,剛聽到這個需求,我有點不明所以。

請教了有處理過這個 issue 的前輩,才明白是使用了 vite-plugin-html 這個插件,分別在不同環境的env 檔案寫入對應的 g-tag,然後動態依據不同環境替換不同的 g-tag。

首先安裝 vite-plugin-html :

npm i vite-plugin-html -D

然後 vite 的根目錄,建立 .env 、.env.development 及 .env.production 三個檔案。

  • .env 通用的環境變數
  • .env.development 開發中的環境變數
  • .env.production 產品完成布署的環境

.env 裡面寫入:

VITE_BASE_URL=/
VITE_GATAG=G-AAAAAAAAAA

.env.development 裡面寫入:

VITE_GATAG-AAAAAAAAAA

.env.production 裡面寫入:

VITE_GATAG=G-BBBBBBBBBB

原本的 vite.config.js 長這樣:

import { fileURLToPath, URL } from "node:url";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  // 解決 Network: use --host to expose
  server: {
    host: "0.0.0.0",
  },
});

然後現在把 vite.config.js 改成:

import { fileURLToPath, URL } from "node:url";
// import path from "path";
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";

import { createHtmlPlugin } from "vite-plugin-html";
// https://vitejs.dev/config/
export default ({ mode }) => {
  process.env = { ...process.env, ...loadEnv(mode, process.cwd()) };
  return defineConfig({
    base: process.env.VITE_BASE_URL,
    plugins: [
      vue(),
      createHtmlPlugin({
        minify: true,
        inject: {
          data: {
            GA4: process.env.VITE_GATAG,
            // injectScript: `<script src="./inject.js"></script>`,
          },
        },
      }),
    ],
    resolve: {
      alias: {
        "@": fileURLToPath(new URL("./src", import.meta.url)),
      },
    },
  });
};

然後修改根目錄的 index.html,把原本放 g-tag 的地方替換成 <%- GATAG %>:

  <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>標題</title>
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script
      async
      src="https://www.googletagmanager.com/gtag/js?id=<%- GATAG %>"
    ></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag() {
        dataLayer.push(arguments);
      }
      gtag("js", new Date());
      gtag("config", "<%- GATAG %>");
    </script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

Vite 設定開發環境與正式環境使用不同的 G-tag
https://popeye-ux.github.io/2023/02/12/vue-env-gtag/
作者
POPEYE
發布於
2023年2月12日
許可協議