【问题标题】:Importing a single rxjs operator not working with react and webpack导入单个 rxjs 运算符不使用 react 和 webpack
【发布时间】:2018-04-26 14:19:18
【问题描述】:

我将 redux-observable 用于 react 应用,使用 webpack 进行捆绑。

当我包含来自 rxjs 的特定运算符时,例如

import 'rxjs/add/operator/mapTo';

它不起作用并引发错误

TypeError: action$.ofType(...).mapTo is not a function. 

但是当我包含完整的 rxjs 库时,它可以工作

import 'rxjs';

导入特定运算符时,我的 js 包确实包含 mapTo 代码,但这些方法未包含在 Observable 原型中。我正在使用 webpack 进行捆绑。在 webpack 中导入特定的 operator 我们需要做一些特殊的事情吗?

代码

import { combineEpics } from 'redux-observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/mapTo';

const PING = 'PING';
const PONG = 'PONG';

const pingEpic = action$ => {
  const obser = action$.ofType(PING);
  return obser.mapTo({ type: PONG });
}

export const epic$ = new BehaviorSubject(combineEpics(pingEpic));
export const createRootEpic = (action$, store) =>
epic$.mergeMap(epic =>
  epic(action$, store)
);

更新

mapTo 方法可用于BehaviorSubject 对象(epic$.mapTo 可用)但不适用于ActionsObservable 对象(action$.mapTo 不是函数)。

【问题讨论】:

  • 你试过import "rxjs/add/operator/switchMap";吗?
  • @msanford 更新了问题以反映 MapTo 而不是 switchMap
  • 在您的webpack.config.js 中,添加一个包含["", ".webpack.js", ".web.js", ".ts", ".js", ".json"]resolve.extensions 数组。这有帮助吗?
  • 是的,但是没用。
  • 奇怪的是,导入完整的 rxjs 有效,它也包含在捆绑地图中但导入特定运算符,代码包含在 js 捆绑包中但文件不包含在捆绑地图中。

标签: rxjs rxjs5 redux-observable


【解决方案1】:

问题很可能是您不小心拥有两个 RxJS 副本。这可能在几种情况下发生,但在您的特定情况下,这听起来很可能是a recently reported issue in rxjs。从 5.5.1 开始,该特定问题已得到修复(5.5.2 现在是最新版本)。

确保您已安装 RxJS 5.5.1 或更高版本 - 如果您的 semver 范围很广,您可能需要删除您的 node_modules 并重新安装以在本地获取更新的版本。您还可以通过查看 node_modules/rxjs/package.json 的 "version" 字段(通常位于底部)进行三重检查

【讨论】:

  • 我重新安装了所有软件包只是为了删除两个 RxJS 副本(如果有的话)并将 raxjs 更新到 5.5.2。但它没有用。
  • 我正在使用 BehaviorSubject 来异步添加史诗。当我导入运算符import 'rxjs/add/operator/mapTo'; 时,它可用于BehaviorSubject 对象,但不适用于ActionsObservable 对象。
  • 嘿@PranabGupta 我看到你接受了我的回答,它最终奏效了吗?
  • 是的,是因为 SSR 的两个 RxJS 副本。
  • 我在 6.5.4 中遇到了同样的问题。工作正常,直到你用 webpack 打包它,yarn.lock 只显示一个版本的 rxjs。还有更多提示吗?
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多