server.publicDir

  • Type:
type PublicDir =
  | false
  | {
      /**
       * The name of the public directory, can be set as a relative path or an absolute path.
       * @default 'public'
       */
      name?: string;
      /**
       * Whether to copy files from the publicDir to the distDir on production build
       * @default true
       */
      copyOnBuild?: boolean;
    };
  • Default:
const defaultValue = {
  name: 'public',
  copyOnBuild: true,
};

By default, Rsbuild will use the public directory as the directory for serving public assets, files in this directory will be served at /.

Related document: Public Folder.

Boolean Type

The ability to serve public assets can be disabled by setting publicDir to false:

export default {
  server: {
    publicDir: false,
  },
};

Object Type

When the value of publicDir is of object type, Rsbuild will merge the current configuration with the default configuration.

For example, to set the public folder name as static and disable copyOnBuild:

export default {
  server: {
    publicDir: {
      name: 'static',
      copyOnBuild: false,
    },
  },
};

Note that setting the value of copyOnBuild to false means that when you run rsbuild preview for a production preview, you will not be able to access the corresponding static resources.

Path Types

The value of name can be set to a relative path or an absolute path. Relative path will be resolved relative to the project root directory.

  • Relative path example:
export default {
  server: {
    publicDir: {
      name: '../some-public',
    },
  },
};
  • Absolute path example:
import path from 'node:path';

export default {
  server: {
    publicDir: {
      name: path.join(__dirname, '../some-public'),
    },
  },
};