Angular 16升级至19后Workspace启动报NG0203错误求助
针对你在混合版本Angular工作区中新增19项目出现的NG0203注入上下文错误,以下是针对性的解决步骤:
统一工作区所有Angular包版本
检查工作根目录和新项目的package.json,确保@angular/core、@angular/cli、@angular/common、@angular/compiler等核心包的版本完全一致(均为19.x.x)。工作区中旧项目的残留依赖可能导致版本冲突,覆盖了新项目的正确依赖。彻底清理依赖缓存
执行以下操作完全重置依赖环境:- 删除根目录和新项目下的
node_modules文件夹 - 删除
package-lock.json(或yarn.lock/pnpm-lock.yaml) - 运行
ng cache clean清理Angular CLI缓存 - 重新执行包安装命令(
npm install/yarn install/pnpm install)
- 删除根目录和新项目下的
校验新项目的构建配置
打开工作区angular.json,确认新项目的architect.build.options配置:- 确保
tsConfig指向新项目自身的tsconfig.app.json,而非工作区根目录的旧配置 - 检查是否存在
preserveSymlinks配置,若有可尝试暂时移除,避免符号链接导致的依赖加载异常
- 确保
修正TypeScript配置
查看新项目的tsconfig.json和tsconfig.app.json,确保:compilerOptions.moduleResolution设置为bundler(Angular 19默认值)compilerOptions.target设置为ES2022或更高版本- 移除任何可能干扰模块解析的旧配置(如
paths中指向旧版本库的映射)
确认启动代码的正确性
检查新项目的main.ts,确保使用Angular 19独立组件的标准启动方式:import { bootstrapApplication } from '@angular/platform-browser'; import { AppComponent } from './app/app.component'; import { appConfig } from './app/app.config'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err));避免混用旧的模块式启动代码(
platformBrowserDynamic().bootstrapModule),两者的注入上下文机制不兼容。升级工作区中的库项目
若工作区的库仍为Angular 16版本,需同步升级到19:- 进入库目录,执行
ng update @angular/core@19 @angular/cli@19 - 重新构建库项目(
ng build your-library)
旧版本库的代码可能包含与Angular 19注入机制冲突的逻辑。
- 进入库目录,执行
重新生成新项目对比配置
在工作区中执行ng generate application temp-app --style=scss --no-ssr生成一个全新的Angular 19项目,将其配置文件(angular.json、tsconfig.json、package.json)与出错项目逐一对比,找出被遗漏或错误修改的配置项。
内容的提问来源于stack exchange,提问作者Stephan Stieger

