Angular 16更新后模块导入路径失效问题咨询
Angular 16升级后导入路径与FESM文件变化的原因及影响
一、导入路径从my-lib/modulex改为my-lib才能正常工作的原因
这是Angular 16配套的ng-packagr(Angular库构建工具)默认调整了库的package.json导出配置导致的:
- 升级前,你的库大概率没配置
exports字段,Node.js模块解析器会自动遍历子目录查找模块,因此my-lib/modulex这类深层导入能生效。 - 升级后,
ng-packagr会自动在库的package.json中生成严格的exports字段,仅对外暴露根路径的入口(比如指向fesm2022/my-lib.mjs或对应类型文件),不再允许直接导入子路径模块。 - 若需保留深层导入能力,可手动修改库的
package.json,在exports字段中添加对应子路径的映射规则,示例:"exports": { ".": "./fesm2022/my-lib.mjs", "./modulex": "./fesm2022/modulex.mjs" }
二、FESM文件从fesm2015/fesm2020变为fesm2022的影响
这个变化是Angular 16的默认行为,通常不会有负面影响:
- Angular 16将目标ES版本升级到了ES2022,
ng-packagr同步默认构建ES2022版本的FESM文件,以此匹配框架目标版本,获得更优的性能与语法支持。 - 只要你的应用也升级到Angular 16,它的目标ES版本同样是ES2022,直接使用fesm2022的库完全兼容。
- 若项目需支持不兼容ES2022的旧浏览器(注意:Angular 16本身已不再支持IE等老旧浏览器),可在库的
ng-package.json中手动指定更低的构建目标,示例:
重新构建后会生成对应版本的FESM文件。"lib": { "entryFile": "src/public-api.ts", "target": "ES2020" }
内容的提问来源于stack exchange,提问作者ruddnisrus
相关产品推荐
相关产品推荐

