如何只使用 rxjs-compat 的一部分,或者写一个自定义的 rxjs-compat?

How to use only a part of rxjs-compat, or write a custom rxjs-compat?

我们 updated 我们的项目使用 Angular & Rxjs 6 并且一切正常。

我们还更新了代码以使用管道运算符,因此我们想删除 rxjs-compat
唯一的问题是我们的一个依赖项仍然使用旧的 Observable 和 Subject 导入语法。

import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';

有没有办法为这两个提供我们自己的最小 rxjs-compat 类?

库没有对 Observable 和 Subject 做任何花哨的事情,也不使用任何运算符,因此导入完整的 rxjs-compat 包似乎有点过分了。

使用@cartant 提到的 paths 我设法在没有 rxjs-compat 的情况下编译它,但输出 main.js 甚至比使用完整的兼容库还要大......

  • rxjs-compat = 691 KB
  • 使用补丁库导入 = 671 KB(理想大小)
  • rxjs-compat 路径 hack = 700 KB

我可能做错了什么,但我没有时间进一步调查。

破解步骤:

  1. 创建文件夹src\rxjs-compat\node_modules(注意node_modules名字,用来绕过一个webpack bug
  2. rxjs-compat 复制你需要的 d.ts.js 文件(在我的例子中是 Observable 和 Subject)
  3. 编辑 tsconfig.app.json 并在 compilerOptions 中添加以下路径: "paths": { "rxjs-compat/Observable": [ "rxjs-compat/node_modules/Observable"], "rxjs/Subject": [ "rxjs-compat/node_modules/Subject"] }

我认为使用 paths 选项时不需要复制任何文件。

我会尝试这样的事情:

"compilerOptions": {
    "baseUrl": ".",
    "paths": {
        "rxjs/Observable": ["./node_modules/rxjs/internal/Observable"],
        "rxjs/Subject": ["./node_modules/rxjs/internal/Subject"]
    }
}

注意必须指定baseUrl

问题是 paths 选项是否影响 node_modules 中的其他依赖项。我不确定,我没试过。