如何仅使用部分rxjs-compat或自定义极简rxjs-compat适配依赖?
自定义极简RxJS Compat适配层解决方案
当然可以!完全没必要为了两个基础类就引入整个臃肿的rxjs-compat包,我们可以自己搭建一个仅适配Observable和Subject的极简兼容层,步骤非常直观:
1. 创建适配文件
在你的项目源码目录(比如src/)下新建一个rxjs-compat-shim文件夹,然后创建两个对应文件:
rxjs-compat-shim/Observable.ts
// 从RxJS 6+的正确路径导入Observable import { Observable } from 'rxjs'; // 导出,模拟旧路径的导出结构 export default Observable; export { Observable };
rxjs-compat-shim/Subject.ts
// 从RxJS 6+的正确路径导入Subject import { Subject } from 'rxjs'; // 导出,模拟旧路径的导出结构 export default Subject; export { Subject };
2. 配置路径映射
修改项目根目录的tsconfig.json(如果是Angular项目,也可以用tsconfig.app.json),在compilerOptions里添加paths规则,把旧的导入路径指向我们的适配文件:
{ "compilerOptions": { // 其他已有的配置... "paths": { "rxjs/Observable": ["src/rxjs-compat-shim/Observable.ts"], "rxjs/Subject": ["src/rxjs-compat-shim/Subject.ts"] } } }
如果你的项目用Webpack单独配置,也可以在webpack.config.js的resolve.alias里添加对应的别名规则,效果是一样的。
3. 验证运行
现在可以移除rxjs-compat包(执行npm uninstall rxjs-compat或者yarn remove rxjs-compat),然后启动项目测试。依赖库中旧的导入语句会被TypeScript和构建工具自动映射到我们的适配文件,完全不影响功能。
额外注意事项
- 如果后续这个依赖库更新了RxJS导入语法,直接删掉这个适配层即可,没有任何遗留负担。
- 要是以后依赖库用到了更多RxJS类(比如
BehaviorSubject、ReplaySubject),只需要在适配层里新增对应的文件和路径映射就行,扩展性很强。
内容的提问来源于stack exchange,提问作者Dan Manastireanu
相关产品推荐
相关产品推荐

