Javascript/React

[vite] ⚡️ html에 env환경 변수 사용하기 : vite-plugin-html-env

- vite에서 html에 env환경 변수 사용하기
- 빌드환경에 따라 env 환경변수 적용하기
- vite-plugin-html-env 사용법

 

⛳️ 하고자 하는 것

vite환경에서 html에 빌드환경에 따라 env환경변수가 다르게 나왔으면 좋겠다.

 


🃏 선택지

1. vite 4.2 업데이트 🔗

4.2 이상부터는 vite에서 html출력을 지원해준다고 한다.

마이그레이션이 가능한 상황이라면 이것도 좋은 것 같다. 

v3로 부터의 마이그레이션 가이드

 

 

2. 모듈 / vite-plugin-html 🔗

가장 많은 사람들이 받아서 사용하는 모듈이다.

검색해보았을 때 가장 참고할 레퍼런스가 많다.

가장 최근 업데이트는 1년전

but, 설치과정에서 막히는 부분이 있어서 나는 사용하지 않았다.

 

 

3. 모듈 / vite-plugin-html-env 🔗

vite-plugin-html에서 내가 딱! 필요한 기능만 빼서 만든 모듈

용량이 2번보다 적었지만, 레퍼런스가 많지 않았다.

손쉽게 설치할 수 있었고 기능이 한정되어있어서 사용하기 편했다.

나의 pick!

 


✅ vite-plugin-html-env 사용법

git허브에 적힌대로 하면되는데..  간단히 번역을 해보겠다.

 

1. package설치

npm install --save-dev vite-plugin-html-env
# or
yarn add vite-plugin-html-env -D

 

2. vite.config.js 설정

// vite.config.js 
import VitePluginHtmlEnv from 'vite-plugin-html-env'

export default {
  plugins: [
    VitePluginHtmlEnv(),
    // or
    // VitePluginHtmlEnv({
    //  CUSTOM_FIELD
    // })

    // Customizable prefixes and suffixes
    // VitePluginHtmlEnv({
    //   prefix: '<{',
    //   suffix: '}>',
    //   envPrefixes: ['VITE_', 'CUSTOME_PREFIX_']
    // })

    // Enable new compile mode by default
    // 1. add directives => vite-if, vite-else
    // 2. Compatible with `import.meta.env.VITE_APP__****`
    // If there are compatibility issues with the new version, please raise the `issue` or submit a `merge request`, I will deal with it promptly in my personal free time.
    VitePluginHtmlEnv({
      compiler: true
      // compiler: false // old
    })
  ]
}

 

3. env 파일에 환경변수 추가

`VITE_APP_`를 변수 key의 머릿말로 쓰는걸 권장한다고 한다.

# .env
VITE_APP_TITLE=测试标题
VITE_APP_HOST=dev.sever****.com

# .env.build-prod
VITE_APP_TITLE=生产标题
VITE_APP_HOST=prod.sever.****.com
// json파일
{
  "scripts": {
    "start": "vite",
    "build:dev": "tsc && vite build --mode development",
    "build:prod": "tsc && vite build --mode production",
  }
}

기본적으로 `.env`를 읽는다.

env.뒤에 글자가 붙는 `.env.~`파일을 사용하기 위해서는 `--mode ~`를 package.json에 적어주어야 한다.

이 부분을 몰라서 많이 헤맸는데, 예를 들어 dev서버에서 `.env.development`의 변수를 사용하기 위해서는 `build --mode development` 를 build scripts에 적어주어야 한다.

 

+ 빌드 환경에 따라 다르게 하기 위해서 amplify 환경변수도 추가해주어야 한다.

aws > amplify

 

환경변수

 

빌드설정

 $BUILD_ENV를 사용해서 root package.json scripts 실행

 

 

4. html에 변수 사용하기

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <!-- Version 1.0.4 uses prefix = <{ and suffix = }> by default -->
    <!-- but is also compatible with older versions of prefixes and suffixes -->

    <!-- <script src="//<% VITE_APP_HOST />/***.js"></script> -->
    <!-- <title><% VITE_APP_TITLE /></title> -->

    <script src="//<{ VITE_APP_HOST }>/***.js"></script>
    <link rel="stylesheet" href="//<{ VITE_APP_HOST }>/test.css" />
    <title><{ VITE_APP_TITLE }></title>

    <!-- compiler: true -->
    <!-- Example 1 -->
    <!-- VITE_APP_ENV = dev -->
    <script vite-if="import.meta.env.VITE_APP_ENV === dev">
      console.log('vite-if')
    </script>
    <script vite-else>console.log('vite-else')</script>

    <!-- Example 2 -->
    <script vite-if="<{ VITE_APP_ENV }> !== dev">
      console.log('vite-if')
    </script>
    <script vite-else>
      console.log('vite-else')
    </script>

    <!-- Example 3 -->
    <!-- VITE_APP_NUM_9 = 9 -->
    <script vite-if="import.meta.env.VITE_APP_NUM_9 < 10">
      console.log('9 < 10')
    </script>
  </head>

  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

 

기타 옵션 링크

 

728x90
반응형