Angular5升级Angular6:RxJS .map()转.pipe(map())自动转换方案咨询
自动迁移RxJS 5到6:把
.map()转成.pipe(map())的省时方案 别担心,官方推荐的rxjs-5-to-6-migrate工具完全能搞定这个自动转换的需求,我之前从Angular5迁到6的时候亲测好用,另外还有几个备选方案,给你整理一下:
1. 官方迁移工具(优先选这个)
这是RxJS团队官方出的迁移工具,基于Codemods实现,能精准处理绝大多数链式操作符的转换,步骤超简单:
- 先全局安装依赖:
npm install -g rxjs-tslint rxjs-5-to-6-migrate - 到项目根目录执行迁移命令(确认你的
tsconfig.app.json路径没错就行):rxjs-5-to-6-migrate -p src/tsconfig.app.json - 执行完它会自动帮你做两件关键的事:
- 把所有
.map()、.filter()这类链式调用,改成pipe(map(...))、pipe(filter(...))的形式 - 更新导入语句,比如把旧的
import 'rxjs/add/operator/map'换成import { map } from 'rxjs/operators'
- 把所有
- 迁移完建议用Git对比下代码差异,再跑一遍
ng lint和项目测试,确保没出问题。
2. 用rxjs-compat先过渡(缓兵之计)
如果暂时不想直接改代码,可以先装个rxjs-compat包,它能让RxJS 6兼容RxJS 5的旧语法:
npm install rxjs-compat --save
这样你的旧代码不用改就能跑,你可以慢慢分批迁移,或者配合上面的工具逐步处理。不过注意这个包会增加项目体积,等完全迁移完记得删掉它。
3. IDE正则批量替换(应付特殊场景)
如果官方工具遇到个别复杂场景没处理好,比如自定义操作符或者嵌套很深的链式调用,可以用VS Code这类IDE的批量替换功能,写个精准的正则:
- 打开替换面板(Ctrl+Shift+H),勾选"正则表达式"
- 查找内容:
(\w+\.)map\(([^)]+)\) - 替换内容:
$1pipe(map($2)) - 提醒:这个正则只适合简单的
.map()调用,而且替换前要确保已经导入了map操作符,你可以再写个正则批量补全导入语句。
4. 自定义Codemod脚本(进阶玩法)
如果你的项目有特殊代码风格或者自定义操作符,还可以基于jscodeshift写自己的Codemod脚本,不过这个需要懂点AST处理,适合有经验的开发者。
总的来说,优先用官方的迁移工具,省时又靠谱,我当时几百个组件的项目,跑一遍工具就搞定了99%的转换,剩下的个别小问题手动调一下就行。
内容的提问来源于stack exchange,提问作者lynxSven
相关产品推荐
相关产品推荐

