publicDir

  • 类型:
type PublicDir =
  | false
  | {
      /**
       * public 目录名称,可以设置为相对路径或绝对路径
       * @default 'public'
       */
      name?: string;
      /**
       * 在生产构建时,是否将文件从 public 目录复制到构建产物目录
       * @default true
       */
      copyOnBuild?: boolean;
    };
  • 默认值:
const defaultValue = {
  name: 'public',
  copyOnBuild: true,
};

默认情况下,Rsbuild 会将 public 目录作为静态资源服务的文件夹,该目录中的文件可在 / 路径下访问。

需要注意的是:

  • 引入 public 中的资源永远应该使用根绝对路径。例如,public/icon.png 应该在源码中被引用为 /icon.png
  • 在生产环境构建过程中,public 目录中的文件将会被拷贝到构建产物目录(默认为 dist)下,请注意不要和产物文件出现名称冲突。当 public 下的文件和产物重名时,构建产物具有更高的优先级,会覆盖 public 下的同名文件。这个功能可以通过将 copyOnBuild 设置为 false 来禁用。

Boolean 类型

通过将 publicDir 设置成 false 可禁用静态资源服务功能:

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

Object 类型

publicDir 的值为 object 类型时,Rsbuild 会根据当前配置与默认配置进行合并。

比如设置 public 目录的名称为 static,并关闭 copyOnBuild

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

需要注意的是,将 copyOnBuild 的值为 false 后,如果执行 rsbuild preview 进行生产环境预览,将无法访问对应的静态资源文件。

路径类型

name 的值可以设置为相对路径或绝对路径,相对路径将会相对于项目根目录进行解析。

  • 相对路径示例:
export default {
  server: {
    publicDir: {
      name: '../some-public',
    },
  },
};
  • 绝对路径示例:
import path from 'node:path';

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