Docusaurus使用getPathsToWatch()出现高频重复编译如何解决?
Docusaurus自定义插件监听文件重复编译解决方案
导致该问题的常见原因和对应修复方案如下:
- 监听路径命中了编译输出目录
Docusaurus默认运行时会生成.docusaurus临时目录、build构建产物目录,如果你的inPath指向的路径包含上述目录,或是glob规则命中了node_modules下的文件,就会出现编译后产物变更再次触发编译的死循环。你可以调整glob规则增加排除项:
return { 'name': 'docusaurus-plugin-doc', getPathsToWatch() { return [ `${inPath}/**/*.{js,jsx,ts,tsx}`, `!${inPath}/**/node_modules/**`, `!${inPath}/**/.docusaurus/**`, `!${inPath}/**/build/**` ]; }, };
插件其他生命周期修改了被监听文件
如果你的插件在loadContent、contentLoaded等开发阶段也会运行的生命周期中,存在写入、修改被监听文件的逻辑,每次编译触发后的修改操作会再次触发新的编译,形成死循环。如果确实需要修改文件,建议把输出路径调整到未被监听的目录,或者新增逻辑仅在生产构建阶段执行写入操作,开发模式跳过写入。监听配置使用了轮询模式导致误触发
如果你的项目配置了webpack轮询监听,很容易因为文件元数据变更频繁触发编译,可以在docusaurus配置中新增webpack配置项关闭轮询,同时明确忽略不需要监听的路径:
// docusaurus.config.js 新增配置 module.exports = { // 原有其他配置 plugins: [ // 原有其他插件 function watchFixPlugin() { return { name: 'docusaurus-plugin-watch-fix', configureWebpack() { return { watchOptions: { ignored: /node_modules|\.docusaurus|build/, poll: false } }; } }; } ] };
内容的提问来源于stack exchange,提问作者James Baker
相关产品推荐
相关产品推荐

