【问题标题】:How to use only a part of rxjs-compat, or write a custom rxjs-compat?如何只使用 rxjs-compat 的一部分,或者编写一个自定义的 rxjs-compat?
【发布时间】:2018-11-04 22:44:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您也许可以使用tsconfig.json 文件的compilerOptions 中的paths 设置来做某事——也就是说,将rxjs-compat 重定向到其他地方——但我从未尝试过依赖项的依赖项。但这真的重要吗?摇树不会产生相同的结果吗?
  • @cartant tree-shaking 似乎不适用于 rxjs-compat。我已经尝试过您提到的paths 技巧,但它似乎没有达到我预期的效果......我可能做错了什么

标签: rxjs rxjs6 rxjs-compat


【解决方案1】:

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

我会尝试这样的:

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

请注意,baseUrl 必须指定。

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

【讨论】:

    【解决方案2】:

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

    • rxjs-compat = 691 KB
    • 使用修补库导入 = 671 KB(理想大小)
    • rxjs-compat 路径破解 = 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"] }

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 2018-10-29
      • 2019-02-28
      • 2019-02-22
      • 1970-01-01
      • 2020-01-10
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多