Closed11

Viteのmodesがビルドにどう影響するか調べる

kazuma1989kazuma1989

https://vitejs.dev/guide/env-and-mode.html

vite serve --mode=production などとしてmodesを変えられると書いてあるが、production, development 以外だとどうなるかいまいちわからない。

kazuma1989kazuma1989
  • import.meta.env.PROD, import.meta.env.DEV の値はどうなるのか。
  • Reactなどはdevelopmentビルドかproductionビルドかで挙動を変える。そこへの影響はどうか。
kazuma1989kazuma1989

import.meta.env.PROD, import.meta.env.DEV の値はどうなるのか

https://github.com/vitejs/vite/blob/22084a64264e84bcbb97eb9ccaa2d7672f0bee71/packages/vite/src/node/config.ts#L636-L642

シンプルに isProduction を反映するだけらしい。そしてつねに DEV === !PROD

kazuma1989kazuma1989

https://github.com/vitejs/vite/blob/22084a64264e84bcbb97eb9ccaa2d7672f0bee71/packages/vite/src/node/config.ts#L485-L490

isProduction の値はここで決まる。

  • 環境変数 NODE_ENV が最優先。
  • VITE_USER_NODE_ENV は .env ファイルに NODE_ENV を定義してあると、その値が入ってくる(後述)。
  • 最後は mode の値を見る。--mode で指定してあればその値を使うし、未指定なら servebuild かで自動で決まる。
kazuma1989kazuma1989

結局modesまわりの値はどう決まるか

優先順に。

  • 環境変数 NODE_ENV
  • .envファイル内の NODE_ENV
  • CLIオプションの --mode
  • vite.configの mode
  • CLIコマンドがserveかbuildか

https://vitejs.dev/config/shared-options.html#mode

kazuma1989kazuma1989
.env
NODE_ENV=from_dotenv
vite.config.ts
export default {
  mode: "from_config",
}
NODE_ENV=from_env vite serve --mode=from_cli
結果
process.env.NODE_ENV === "from_env"
import.meta.env.MODE === "from_cli"
import.meta.env.DEV === true
import.meta.env.PROD === false
kazuma1989kazuma1989
.env.staging
NODE_ENV=production
vite serve --mode=staging
結果
process.env.NODE_ENV === "production"
import.meta.env.MODE === "staging"
import.meta.env.DEV === false
import.meta.env.PROD === true
kazuma1989kazuma1989
vite serve --mode=staging
結果
process.env.NODE_ENV === "staging"
import.meta.env.MODE === "staging"
import.meta.env.DEV === true
import.meta.env.PROD === false
このスクラップは2023/05/15にクローズされました