Javascript SystemJS没有';t正确加载RxJS

Javascript SystemJS没有';t正确加载RxJS,javascript,systemjs,jspm,Javascript,Systemjs,Jspm,我在使用SystemJS(0.19.47)正确加载RxJS时遇到问题 基本上我有一些打字稿 import {BehaviorSubject} from "rxjs"; let subject = new BehaviorSubject(4); 这将传输到JavaScript System.register(["rxjs"], function (exports_1, context_1) { "use strict"; var __moduleName = context_

我在使用SystemJS(0.19.47)正确加载RxJS时遇到问题

基本上我有一些打字稿

import {BehaviorSubject} from  "rxjs";

let subject = new BehaviorSubject(4);
这将传输到JavaScript

System.register(["rxjs"], function (exports_1, context_1) {
    "use strict";
    var __moduleName = context_1 && context_1.id;
    var rxjs_1, subject;
    return {
        setters: [
            function (rxjs_1_1) {
                rxjs_1 = rxjs_1_1;
            }
        ],
        execute: function () {
            subject = new rxjs_1.BehaviorSubject(4);
        }
    };
});
但是,当它运行时,rxjs_1_1看起来像下面这样,所以当它尝试实例化rxjs_1.BehaviorSubject时,它是未定义的,因为它确实应该调用rxjs_1.default.BehaviorSubject

{
  "default": {
    "BehaviorSubject": function (_value) {…}
  }
}

我用SystemJS加载的所有其他东西似乎都很好,因为我可以在“default”键下看到BehaviorSubject,我知道它实际上正在加载。我只是不明白为什么RxJS不工作。

尝试从“RxJS/Rx”导入{BehaviorSubject}


您正在正确导入RxJS。例如:

// import.ts
import {BehaviorSubject} from "rxjs";

let subject = new BehaviorSubject(4);
console.log(subject);
当编译为JS时,您可以将其加载到
节点
(显然取决于您的目录结构):

所以问题是为什么您认为
BehaviorSubject
应该在一些“default”属性下,因为RxJS包没有默认的导出


从你问题中的标签来看,你似乎在使用
jspm
,但你在帖子中没有提到它,所以问题可能在那里,而不是在SystemJS中。

我也有类似的问题。下面的代码不起作用,因为可观察的未定义

import { Observable } from 'rxjs/Observable';
let obs = Observable.create((observer) => observer.next(1)); 
但是当我像这样更改JS文件中的代码时

obs = Observable_1.default.Observable.create(...)
然后一切正常。

我也有同样的问题

解决方法是将systemjs更改为以前的版本之一。 就我而言,0.19.27确实有效。

请尝试我的设置:

tsconfig.json

"compilerOptions": {
    "module": "commonjs",
    ...
}
“模块”:“系统”
在我的经验中工作不好

ts

import { BehaviorSubject } from 'rxjs/BehaviorSubject';

谢谢,尽管这似乎还不行。当它只存在于Rx_1.default.BehaviorSubject()上时,它只会变为尝试调用新Rx_1.BehaviorSubject(),谢谢,但它与上面的相同,它位于“default”下,而不是它试图从中访问它的根对象。尽管您的第二个建议是从“RxJs”导入{BehaviorSubject}失败,因为“RxJs”没有映射到SystemJS中的任何内容。进一步解释为什么这个答案对提问者有效会很有帮助。由于问题的性质,仅更改导入语句不太可能解决此问题(他正在接收模块,但看起来不正确)。此外,第一次导入意味着
BehaviorSubject
是一个命名的导出,但正在从命名的导出文件请求它,这在构造良好的模块中也会失败(例如,BehaviorSubject.js中的
export default…
),我在
0.19.47
中没有遇到此问题,只有当我升级到
0.20.x
时,这个问题才会出现——对于任何看到这篇文章的人,这里都会讨论这个问题
obs = Observable_1.default.Observable.create(...)
"compilerOptions": {
    "module": "commonjs",
    ...
}
import { BehaviorSubject } from 'rxjs/BehaviorSubject';