Node.js Observable.fromPromise不仅在CircleCI上构建时存在

Node.js Observable.fromPromise不仅在CircleCI上构建时存在,node.js,typescript,rxjs,observable,circleci,Node.js,Typescript,Rxjs,Observable,Circleci,谁能帮我弄清楚这件事。下面的代码片段在NodeJS Typescript环境中运行,这在跨多个平台的多台计算机上运行良好,但无法在CircleCI上构建,原因如下: 错误TS2339:类型“typeof Observable”上不存在属性“fromPromise” import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/frompromise'; import 'rxjs/add/operator/do'

谁能帮我弄清楚这件事。下面的代码片段在NodeJS Typescript环境中运行,这在跨多个平台的多台计算机上运行良好,但无法在CircleCI上构建,原因如下:

错误TS2339:类型“typeof Observable”上不存在属性“fromPromise”

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/frompromise';
import 'rxjs/add/operator/do';

return Observable.fromPromise(col.insertOne(document))

CircleCI环境中有什么不同之处导致了这种情况,解决方案是什么?

好的,今天一定不是我的日子。问题是import语句中的大写字母“P”

import 'rxjs/add/observable/fromPromise';

这在带有不区分大小写文件系统的平台上是没有问题的,所以我在Mac OS/X和Windows上都没有注意到。但是CircleCI使用Linux

使用RxJS 5.5+,
可观察的
原型不包括任何静态方法。出于这个原因,您需要采取两种方法之一来包括
fromPromise
(和其他)静态方法

RxJS v5.5.2是Angular 5的默认依赖版本


方法1(首选选项)

要使用
fromPromise
方法,请从
rxjs/observable
独立导入它

import { fromPromise } from 'rxjs/observable/fromPromise';
let observable = fromPromise(promise);
这种方法有利于减少捆绑包的大小,因为它将通过修补
Observable
原型只导入您需要的内容


方法2(未优化方法)

要像以前一样使用static
Observable.fromPromise
,需要从
rxjs/Rx
导入Observable

import Rx from 'rxjs/Rx';

此方法将导入整个核心功能集,从而产生更大的捆绑包大小。

Thx用于升级!