Angular14升级PrimeNG后报table/table未从包导出错误
table/table is not exported from the package报错修复 错误核心信息
项目基于Angular 14.0.2,升级PrimeNG到最新版本后编译失败,报错日志如下:
./node_modules/library/fesm2020/library.mjs:133:0-29 - Error: Module not found: Error: Package path ./table/table is not exported from package D:\employee\node_modules\primeng (see exports field in D:\employee\node_modules\primeng\package.json)
排查修复步骤
第一步:校验版本兼容性
PrimeNG和Angular版本是严格对齐的:PrimeNG 15及以上版本最低要求Angular 15运行环境,Angular 14最高只能兼容PrimeNG 14.x版本。直接在Angular 14环境安装最新版PrimeNG,会因为新版本包exports字段规则变更,被旧版Angular构建工具识别为非法路径,直接抛出该错误。
先执行命令查看本地安装的PrimeNG版本:npm ls primeng
如果返回的版本号大于等于15.0.0,直接安装兼容Angular14的对应版本即可:npm install primeng@14.x primeicons@6.x --save第二步:修正错误的导入路径
确认PrimeNG版本为14.x后仍报错的,全局搜索项目内所有PrimeNG相关的导入语句,排查是否存在深层路径导入的错误写法。PrimeNG 14的官方公开导入路径不支持primeng/table/table这类深层引用,Table模块的正确导入路径为primeng/table,把所有错误写法替换即可:// 错误导入 // import { TableModule } from 'primeng/table/table'; // 正确导入 import { TableModule } from 'primeng/table';第三步:清理缓存重新安装依赖
版本和导入都修正后,需要清理旧的构建缓存和依赖残留,避免旧文件干扰:- 删除项目根目录下的
node_modules文件夹,以及对应包管理器的锁文件(npm对应package-lock.json、yarn对应yarn.lock、pnpm对应pnpm-lock.yaml) - 执行
npm cache clean --force清理npm全局缓存 - 重新执行
npm install安装全部依赖 - 执行
ng serve启动项目,不要复用之前的构建缓存
- 删除项目根目录下的
第四步:排查第三方依赖冲突
如果以上操作后仍报错,观察报错来源是node_modules/library/fesm2020/library.mjs,说明是项目中引入的某个基于PrimeNG二次封装的第三方组件库,内部写死了primeng/table/table的旧导入路径,且未适配当前PrimeNG版本的导出规则。可以先将该第三方依赖降级到适配PrimeNG 14的版本,临时规避可以在angular.json的构建配置中添加白名单跳过校验:"architect": { "build": { "options": { "allowedCommonJsDependencies": ["primeng/table"] } } }
内容的提问来源于stack exchange,提问作者Vignesh

