运行测试抛出TypeError: stylis.middleware is not a function求助
TypeError: stylis.middleware is not a function 排查解决思路 这个报错是运行时加载到的stylis模块没有暴露middleware方法导致的,按下面顺序排查基本都能解决:
- 第一步先确认依赖树里的stylis版本情况
在项目根目录执行对应包管理命令查看依赖关系:- npm项目执行:
npm ls stylis - yarn项目执行:
yarn why stylis - pnpm项目执行:
pnpm ls stylis
注意:stylis从4.0版本开始才正式对外暴露middleware API,如果查到依赖树里存在3.x版本的stylis,或者多个版本的stylis被重复安装,就会触发这个报错。常见触发场景是CSS-in-JS相关依赖(比如@emotion/cache、styled-components、linaria等)和stylis版本不匹配。
- npm项目执行:
- 第二步修复版本冲突
存在版本冲突时,直接通过包管理的版本强制规则把整个项目依赖树里的stylis锁定到4.x稳定版(推荐4.2.0,兼容性最好):- npm用户在package.json中添加如下配置:
"overrides": { "stylis": "4.2.0" } - yarn用户在package.json中添加如下配置:
"resolutions": { "stylis": "4.2.0" } - pnpm用户在package.json中添加如下配置:
"pnpm": { "overrides": { "stylis": "4.2.0" } }
node_modules文件夹和对应的锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml),重新执行依赖安装命令即可。 - npm用户在package.json中添加如下配置:
- 第三步排查测试环境模块解析问题
如果是运行单元测试(jest/vitest)时抛出的错误,大概率是测试运行时的模块解析规则有问题:
可以先在测试文件的最顶部加一行代码打印stylis的实际加载路径:console.log(require.resolve('stylis')),确认加载的文件路径是不是你预期的node_modules下的正确版本。
常见配置错误包括:jest的transformIgnorePatterns规则没有包含stylis,导致esm格式的stylis没有被正确转译;或者webpack/vite的别名配置错误,把stylis指向了错误的文件。 - 极端损坏场景修复
如果前面步骤都没解决,检查本地包管理工具缓存是否损坏,执行对应清缓存命令:- npm:
npm cache clean --force - yarn:
yarn cache clean - pnpm:
pnpm store prune
清完缓存后重新安装依赖即可。
- npm:
内容的提问来源于stack exchange,提问作者Marwan
相关产品推荐
相关产品推荐

