Angular升级至9后已安装的ngx-scroll-event无法找到问题求助
问题原因
- Angular 9 首次默认启用Ivy编译引擎,对第三方包的模块导出规范、类型声明兼容性要求远高于Angular 8及更早版本使用的View Engine。ngx-scroll-event@2.0.2为适配Angular 7/8的历史版本包,其package.json的模块导出配置、类型声明文件格式不符合Ivy的校验规则,即使包文件物理存在,TypeScript也无法识别其导出内容。
- 该版本包仅采用CommonJS规范导出模块,Angular 9默认的TypeScript配置未开启CommonJS模块兼容识别,也会触发模块未找到报错。
解决方案
- 首先修改项目根目录
tsconfig.json的编译配置,放宽CommonJS模块识别规则:
{ "compilerOptions": { "allowSyntheticDefaultImports": true, "esModuleInterop": true, "moduleResolution": "node" } }
修改后如果仍有报错,可调整该包的引入写法:
// 原引入写法 import { ScrollEventModule } from 'ngx-scroll-event'; // 改为全量导入写法 import * as NgxScrollEvent from 'ngx-scroll-event'; // 模块使用时取NgxScrollEvent.ScrollEventModule即可
- 若上述配置仍无效,可在
angular.json中为该包开启CommonJS依赖兼容:
找到projects > 你的项目名称 > architect > build > options节点,新增配置项:
"allowedCommonJsDependencies": [ "ngx-scroll-event" ]
- 若以上方案均无法解决,说明该包完全不兼容Ivy引擎,可直接使用Angular原生滚动事件监听替代该第三方包,无需额外依赖:
// 组件内原生监听滚动事件示例 @HostListener('window:scroll', ['$event']) handleScroll(event: Event) { // 此处写入原ngx-scroll-event对应的滚动处理逻辑 }
- 所有配置修改完成后,清空Angular本地缓存再启动项目即可:
# 类Unix系统执行 rm -rf .angular # Windows系统可手动删除项目根目录下的.angular文件夹 ng serve
内容的提问来源于stack exchange,提问作者Shinjoku
相关产品推荐
相关产品推荐

