dev.watchFiles

  • 类型:
type WatchFilesOptions = {
  paths: string | string[];
  type?: 'reload-page' | 'reload-server';
  //  chokidar 选项
  options?: ChokidarOptions;
};

type WatchFilesConfig = WatchFiles | WatchFiles[];
  • 默认值: undefined

监听指定文件和目录的变化。当文件发生变化时,可以触发页面的重新加载,或者触发 dev server 重新启动。

paths

  • 类型: string | string[]
  • 默认值: undefined

监视的文件或目录的路径,支持 glob 语法。可以是单个路径,也可以是多个路径组成的数组。

  • 监听单个文件:
export default {
  dev: {
    watchFiles: {
      paths: 'public/demo.txt',
    },
  },
};
  • 使用 glob 匹配多个文件:
export default {
  dev: {
    watchFiles: {
      paths: 'src/**/*.txt',
    },
  },
};
  • 监听多个文件路径:
export default {
  dev: {
    watchFiles: {
      paths: ['src/**/*.txt', 'public/**/*'],
    },
  },
};

type

  • 类型: 'reload-page' | 'reload-server'
  • 默认值: 'reload-page'

指定当文件发生变化时,是触发页面重新加载,还是触发 dev server 重新启动。

reload-page

reload-page 表示当文件发生变化时,浏览器打开的页面会自动重新加载。如果未明确指定 type,Rsbuild 会默认采用 reload-page 行为。

这可以用于监听一些静态资源文件的变化,例如 public 目录下的文件。

export default {
  dev: {
    watchFiles: {
      type: 'reload-page',
      paths: 'public/**/*',
    },
  },
};

如果 dev.hmrdev.liveReload 都设置为 false,则页面将不会自动重新加载。

reload-server

reload-server 表示当文件发生变化时,dev server 会自动重新启动。这可以用于监听一些配置文件的变化,例如被 rsbuild.config.ts 文件 import 的模块。

例如,你在 config 目录下维护了一些公共配置文件,例如 common.ts,你希望当这些文件发生变化时,dev server 可以自动重新启动。示例配置:

rsbuild.config.ts
import { commonConfig } from './config/common';

export default {
  ...commonConfig,
  dev: {
    watchFiles: {
      type: 'reload-server',
      paths: ['./config/*.ts'],
    },
  },
};

需要注意的是,reload-server 功能由 Rsbuild CLI 提供。如果你使用的是自定义 server 或基于 Rsbuild 封装的上层框架,目前暂不支持此配置。

options

  • 类型: ChokidarOptions
  • 默认值: undefined

watchFiles 是基于 chokidar v4 实现的,你可以通过 options 传入 chokidar 的选项。

export default {
  dev: {
    watchFiles: {
      paths: 'src/**/*.txt',
      options: {
        usePolling: false,
      },
    },
  },
};

传入数组

dev.watchFiles 支持传入一个数组,这允许你同时配置不同 type 的监听器,或是为不同的目录配置不同的 watchOptions

export default {
  dev: {
    watchFiles: [
      {
        type: 'reload-page',
        paths: 'public/**/*',
      },
      {
        type: 'reload-server',
        paths: ['./config/*.ts'],
      },
    ],
  },
};

说明

watchFiles 不适用于监听构建依赖的文件。当 Rsbuild 构建开始时,底层的 Rspack 默认会监听所有构建依赖,当这些文件发生变化时,会触发一次新的构建。

如果你希望当某些文件变化时,不触发重新构建,可以使用 Rspack 的 watchOptions.ignored 配置项。

例如,指定当 node_modules 中文件发生变化时,不触发重新构建,可以添加如下配置:

export default {
  tools: {
    rspack: {
      watchOptions: {
        ignored: /node_modules/,
      },
    },
  },
};