导入不使用react和webpack的单个rxjs操作符

导入不使用react和webpack的单个rxjs操作符,rxjs,rxjs5,redux-observable,Rxjs,Rxjs5,Redux Observable,我正在使用react应用程序的redux observable和捆绑的webpack 当我包含rxjs中的特定操作符时,比如 import 'rxjs/add/operator/mapTo'; 它不工作并抛出错误 TypeError: action$.ofType(...).mapTo is not a function. 但当我包含完整的rxjs库时,它就可以工作了 import 'rxjs'; 导入特定运算符时,我的js包确实包含mapTo代码,但这些方法没有包含在Observabl

我正在使用react应用程序的redux observable和捆绑的webpack

当我包含rxjs中的特定操作符时,比如

import 'rxjs/add/operator/mapTo';
它不工作并抛出错误

TypeError: action$.ofType(...).mapTo is not a function. 
但当我包含完整的rxjs库时,它就可以工作了

import 'rxjs';
导入特定运算符时,我的js包确实包含mapTo代码,但这些方法没有包含在Observable prototype中。我正在使用网页包进行捆绑。我们是否需要为在网页包中导入特定操作员做任何特殊的操作

代码

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)
);

更新

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
不是一个函数)。

问题很可能是您意外拥有两个RxJS副本。这可能发生在几种情况下,但在您的具体情况下,听起来很可能发生。该特定问题已在5.5.1中修复(5.5.2现在是最新版本)


确保已安装RxJS 5.5.1或更高版本——如果您的semver范围较广,则可能需要删除node_模块并重新安装以在本地获得更新版本。您还可以通过查看
“version”
字段的node_modules/rxjs/package.json进行三重检查,通常在底部

是否尝试导入“rxjs/add/operator/switchMap”?@msanford更新了问题以反映
MapTo
,而不是
switchMap
。在
webpack.config.js
中,添加一个数组,其中包含
[“”、“.webpack.js”、“.web.js”、“.ts”、“.js”、“.json”]
。这有用吗?是的,但它不起作用。奇怪的是,导入完整的rxjs工作,它也包含在捆绑地图中,但导入特定的运算符,代码包含在js捆绑包中,但文件不包含在捆绑地图中。我重新安装了所有包,只是为了删除rxjs的两个副本(如果有的话),并将raxjs更新为5.5.2。但它不起作用。我使用'BehaviorSubject'异步添加epics。当我导入一个操作符时,
import'rxjs/add/operator/mapTo'
,它可用于
行为主体
对象,但不可用于
操作可维护
对象。嘿@PranabGupta我看到你接受了我的答案,它是否最终起作用了?是的,这是由于SSR导致的RxJS的两个副本。我对6.5.4也有同样的问题。在您将其与webpack打包之前,Thread.lock只能显示rxjs的一个版本。还有什么提示吗?