Angular5使用angular-material-fileupload报错求助:模块找不到
解决Angular 5中使用angular-material-fileupload的RxJS导入错误
你遇到的问题本质是库依赖的RxJS版本和Angular 5项目默认的RxJS版本不兼容。Angular 5配套的是RxJS 5.x,而你用的这个angular-material-fileupload库是基于RxJS 6+的语法编写的——RxJS 6重构了模块导入路径,废弃了rxjs/observable/merge、rxjs/operators/startWith这类旧路径,所以你的项目找不到这些模块。
这里有几个实用的解决办法:
方法一:安装兼容RxJS 5的库版本
这个库的早期版本是支持RxJS 5的,你可以指定安装1.x系列的稳定版本:
npm install angular-material-fileupload@1.1.0 --save
安装完成后重启项目,模块找不到的错误应该就能解决。
方法二:升级RxJS并添加兼容补丁
如果你不想降级库,可以把项目的RxJS升级到6.x,同时安装rxjs-compat补丁来兼容旧的导入语法,确保库的代码能正常运行:
- 执行升级命令:
npm install rxjs@6 rxjs-compat@6 --save
- 重启Angular项目,报错会消失。
小贴士:RxJS 6和Angular 5的兼容性没问题,但如果你的项目里有自己写的RxJS代码,后续可以逐步迁移到RxJS 6的新语法(比如使用
pipe操作符),rxjs-compat会暂时帮你兼容旧代码。
方法三:手动修改库的导入路径(临时方案,不推荐)
如果只是临时应急,可以直接修改node_modules/angular-material-fileupload/matFileUpload.esm.js里的导入语句,适配RxJS 5的语法:
- 将
import { merge } from 'rxjs/observable/merge'改为import { merge } from 'rxjs/add/observable/merge' - 将
import { startWith } from 'rxjs/operators/startWith'改为import 'rxjs/add/operator/startWith',同时把代码里的pipe(startWith(...))改成startWith(...)的链式调用
不过这种方法不推荐,因为下次执行npm install时,你的修改会被覆盖。
内容的提问来源于stack exchange,提问作者Ruby
相关产品推荐
相关产品推荐

