SystemJS无法正确加载RxJS

时间:2017-04-18 01:35:25

标签: javascript systemjs jspm

我无法使用SystemJS(0.19.47)正确加载RxJS

基本上我有一些TypeScript ......

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加载的所有其他东西似乎工作正常,因为我可以在"默认"下看到BehaviorSubject。关键,我知道它实际上正在加载。我只是不明白为什么RxJS没有工作。

6 个答案:

答案 0 :(得分:1)

尝试import {BehaviorSubject} from "rxjs/Rx";

答案 1 :(得分:1)

我遇到了同样的问题。

解决方法是将systemjs更改为以前的版本之一。 在我的情况下,0.19.27确实有效。

答案 2 :(得分:0)

package servertester;
import java.net.*;
import java.io.*;
import java.util.*;

public class ServerRunnable implements Runnable{

private Socket con;

ServerRunnable(Socket con){
    this.con = con;
}

@Override
public void run() {
    InputStream in;
    try {
        StringBuilder str = new StringBuilder();
        in = con.getInputStream();
        BufferedInputStream bin = new BufferedInputStream(in);
        Reader reader = new InputStreamReader(bin);

        for(int c = reader.read(); c != -1; c = reader.read()){

            str.append((char) c);
        }
        System.out.println(str);
    }catch(NullPointerException n){
        System.out.println("np");
    }
        catch (IOException e) {
        System.out.println("io");

        }finally{
            if(con != null)
                try {
                    con.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }


    }



}

import {BehaviorSubject} from  "rxjs/BehaviorSubject";

答案 3 :(得分:0)

您正确导入RxJS。例如:

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

let subject = new BehaviorSubject(4);
console.log(subject);

当编译为JS时,您可以在node中加载它(显然取决于您的目录结构):

const SystemJS = require('systemjs');

SystemJS.config({
  map: {
    'rxjs': './node_modules/rxjs/bundles/Rx.js',
  },
});

SystemJS.import('import_01.js');

所以问题是为什么你认为BehaviorSubject应该在某些"默认"属性,因为RxJS包没有默认导出。

根据您问题中的标记,您似乎正在使用jspm,但您没有在帖子中提及它,因此可能存在问题,而不是SystemJS中。

答案 4 :(得分:0)

我有类似的问题。以下代码无效,因为Observable 未定义

import { Observable } from 'rxjs/Observable';
let obs = Observable.create((observer) => observer.next(1)); 

但是当我像这样改变JS文件中的代码时

obs = Observable_1.default.Observable.create(...)

然后一切正常。

答案 5 :(得分:0)

尝试我的设置:

<强> tsconfig.json

"compilerOptions": {
    "module": "commonjs",
    ...
}
根据我的经验,

"module": "system"效果不佳。

<强> TS

import { BehaviorSubject } from 'rxjs/BehaviorSubject';