Closed3

[rsbuild] process.env を stub したい

nbstshnbstsh

rsbuild では、source.defineloadEnv() によって、 process.env から dotenv で管理する環境変数を client side で利用できる。

しかし、process.env で指定している値が source.define に存在しない場合、process.env がソースコードに残り以下のような reference error が起きてしまう。

Uncaught ReferenceError: process is not defined

process.env.OPTIONAL がない場合は、undefined に fallback するようにしたい。

(dotenv-webpack plugin の process.env stubbing のような挙動をイメージしている。

nbstshnbstsh

解決

source.define で "process.env" を空 object に設定してあげればOK。

rsbuild.config.ts
import { defineConfig, loadEnv } from '@rsbuild/core';

const { publicVars } = loadEnv({ prefixes: ['REACT_APP_'] });

console.log('publicVars:', publicVars);

export default defineConfig({
  //...
  source: {
    define: {
      ...publicVars,
      'process.env': {},
    },
  },
  //...
});
nbstshnbstsh

example

const url = process.env.SOME_URL;
const optionalValue = process.env.OPTIONAL;
.env
SOME_URL=https://example.com

この時、rsbuild config の source.define は以下のようになる↓

  source: {
    define: {
      'process.env.SOME_URL':  'https://example.com',
      'process.env': {},
    },
  },

すると、compile 後のコードはこうなる↓

const url = 'https://example.com';
const optionalValue = {}.OPTIONAL; // {}.OPTIONAL => undefined
このスクラップは2024/08/30にクローズされました