You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ejected配置CRA下Cypress10组件测试CI监听超限与Sass报错排查

Cypress 10 + eject CRA 组件测试CI环境问题修复方案

初始判断验证

你的判断完全正确:当配置中指定framework: 'create-react-app'时,Cypress 内置的@cypress/webpack-dev-server会自动加载适配CRA的默认webpack编译规则、loader链与基础配置,因此即使你没有传入完整的webpack.config.js,编译、组件挂载、样式加载也能正常运行。


方案1 文件监听器报错根因与修复

核心问题:配置传参位置错误

你当前的配置把webpack-dev-server的相关参数嵌套在了webpackConfig.devServer字段下,Cypress 不会读取该位置的devServer配置——webpack编译配置和webpack-devServer服务配置在Cypress的devServer配置项中是平级关系,因此你设置的watchContentBase: false根本没有生效,chokidar依然按照默认规则监听所有文件,最终触发Docker环境默认的inotify监听数上限报错。

完整修复配置

CI环境下需要关闭所有和热重载、文件监听相关的配置项,不要只设置watchContentBase,修复后的配置如下:

import webpackDevServerConfig from './config/webpackDevServer.config';

const isRunningInCI = process.env.CI === 'true';

export default defineConfig({
    component: {
        devServer: {
            framework: 'create-react-app',
            bundler: 'webpack',
            // webpack编译相关配置放该层级,现有方案不需要额外传入webpackConfig即可正常运行
            // devServer服务配置与framework、bundler、webpackConfig平级,不要嵌套在webpackConfig内
            ...webpackDevServerConfig,
            // CI环境下全量关闭监听、热更新能力
            ...(isRunningInCI ? {
                hot: false, // 关闭HMR热模块替换
                liveReload: false, // 关闭文件变更触发的页面重载
                watchContentBase: false, // 关闭静态资源目录监听
                watchOptions: {
                    ignored: '**/*', // 忽略所有文件的变更监听
                }
            } : {})
        }
    }
});

兜底方案(配置修改后仍有零星报错时使用)

Drone CI默认使用Docker运行步骤,基础镜像的inotify监听数默认值通常较低(默认为8192),可以在测试步骤执行前加一行系统参数调整命令,直接调大监听器上限:

sysctl -w fs.inotify.max_user_watches=524288

方案2 SassError 报错原因

该报错是loader链重复叠加导致的:
当你指定framework: 'create-react-app'时,Cypress已经自动注入了CRA所需的所有样式处理loader(包括css-loader、postcss-loader、resolve-url-loader、sass-loader、style-loader),你再把eject后完整的webpack.config.js传入webpackConfig字段,会导致同一份scss文件被两组重复的loader规则依次处理,style-loader输出的JS运行时代码(就是报错里的var api = require("...injectSt..."))被当成SCSS内容传入sass-loader解析,自然会报非法CSS语法错误。
如果要使用自定义webpack配置,不要全量传入eject后的完整配置,只需要在Cypress自动生成的CRA基础配置上,通过函数形式修改你需要调整的规则即可,避免loader重复。


内容的提问来源于stack exchange,提问作者Avery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:09:19