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

Nx Jest Angular测试中无法使用lib库组件报firstCreatePass为null

可行排查方向

  • 优先排查Angular依赖版本冲突
    firstCreatePass是Angular Ivy渲染器的内部属性,该报错90%以上的场景是monorepo中存在多份@angular/core实例,或者库与应用的Angular版本不一致。执行依赖检查命令确认版本:npm ls @angular/core / pnpm why @angular/core / yarn list @angular/core,确保所有依赖的Angular主版本完全一致,没有重复安装的实例。
    同时检查库的编译配置:如果库开启了compilationMode: 'partial'(Angular库默认的发布编译模式),需要确认应用测试的编译配置支持加载partial编译的产物,不要单独给测试配置关闭Ivy。

  • 检查跨库导入路径规则
    确认应用中导入MyLibComponent/MyLibModule时,使用的是Nx约定的公共路径(比如@你的工作区名/库名),而不是跨目录的相对路径直接导入lib内部的源文件。相对路径导入会导致组件元数据被重复编译,触发Ivy内部实例冲突。
    同时检查库的project.json/ng-package.json中的exports配置,是否正确暴露了MyLibModule,不要有未公开的隐藏导出。

  • 核对测试配置合理性

    1. 检查MyLibModule内部是否错误导入了BrowserModule、BrowserAnimationsModule这类只能在应用根模块导入的包,测试环境中重复导入这类模块会破坏Ivy的实例缓存。
    2. 如果你用Jest运行测试,检查jest.config.js中的moduleNameMapper配置,是否将所有@angular/*的导入都映射到了工作区根目录的node_modules,避免加载多份Angular实例:
"moduleNameMapper": {
  "^@angular/(.*)$": "<rootDir>/../../node_modules/@angular/$1"
}
  1. 临时在TestBed的schemas中添加CUSTOM_ELEMENTS_SCHEMA运行测试,如果报错消失,即可确认问题出在lib组件的元数据加载环节,再进一步缩小排查范围。
  • 清理全链路缓存重试
    执行以下命令清理所有缓存后重试,避免增量编译缓存导致产物不匹配:
nx reset
rm -rf node_modules/.cache dist tmp
nx test my-app --skip-nx-cache

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:30:01