2017-01-11 1 views
0

バージョン問題ローディングrxjsは、私が「プロジェクト(それはtypescriptですで書かれています)を持っているSystemJs

npm: 3.10.9
systemjs: 0.19.41
typescript: 1.8.10
rxjs: 5.0.3

背景

をバンドル追加しようとしていますrxjsと同じですが、バンドルされたファイルをsystemjsまで読み込む際に問題が発生しました。

System.config({ 
    transpiler: 'typescript', 
    paths: { 
     'src:*': '/src/*', 
     'npm:*': '/node_modules/*' 
    }, 
    map: { 
     'lib': 'src:lib', 
     'rxjs': 'npm:rxjs/bundles/Rx.js', 
     'typescript': 'npm:typescript/lib/typescript.js', 
     'systemjs': 'npm:systemjs/dist/system.src.js' 
    }, 
    packages: { 
     lib: { 
      defaultExtension: 'js' 
     } 
    } 
}); 

をconfigコン

SystemJs問題

上記の設定を使用して、私は次のエラーを取得します。 amd形式に間違ってデフォルトをsystemjs事実、実行されることは決してありませんRx.jsのライン245上のexporter機能によって引き起こされる

Error: (SystemJS) undefined is not a constructor (evaluating '__extends(UnsubscriptionError, _super)') 

モジュール形式が設定されていない場合にはモジュール形式の検出

、自動正規表現ベースの検出を使用した:systemjsドキュメントから

。このモジュール形式の検出は決して完全ではありませんが、大半のユースケースでうまく対応しています。

未遂ソリューション

私は明示的に設定してglobalrxjsパッケージ形式を設定すると、この問題を解決するだろうと推測。これが最初の問題を修正しますが

System.config({ 
    transpiler: 'typescript', 
    paths: { 
     'src:*': '/src/*', 
     'npm:*': '/node_modules/*' 
    }, 
    map: { 
     'lib': 'src:lib', 
     'rxjs': 'npm:rxjs/bundles/Rx.js', 
     'typescript': 'npm:typescript/lib/typescript.js', 
     'systemjs': 'npm:systemjs/dist/system.src.js' 
    }, 
    packages: { 
     lib: { 
      defaultExtension: 'js' 
     }, 
     rxjs: { 
      format: 'global' 
     } 
    } 
}); 

問題2

は、それが第二を作成しました。 undefinedのように、私がどこでもrxjsのインポートを使用しようとすると、エラーが発生します。コンソールのtranspiledコードがwindow.Rxが正しくRxオブジェクトに設定されますが、SomeClassに設定されますrxjs_1_1オブジェクトは、グローバルRxオブジェクトではなく、別のことが明らかになったデバッグ

import {Observable} from 'rxjs' 

export class SomeClass { 

    ... 

    private _isObservable(arg: any): boolean { 
     return arg instanceof Observable; 
    } 
} 

Uncaught TypeError: Right-hand side of 'instanceof' is not an object at SomeClass._isObservable

オブジェクトにはRxグローバルセットがプロパティ 'Rx'として設定されています。

したがってrxjs_1.Rx.Observableは動作しますが、rxjs_1.Observable`では動作しません。

(function(System, SystemJS) {System.register(['rxjs'], function(exports_1, context_1) { 
"use strict"; 
var __moduleName = context_1 && context_1.id; 
var rxjs_1; 
var SomeClass; 
return { 
    setters:[ 
     function (rxjs_1_1) { 
      rxjs_1 = rxjs_1_1; 
     }], 
    execute: function() { 
     SomeClass = (function() { 
      function SomeClass() { 
      } 
      ... 
      SomeClass.prototype._isObservable = function (arg) { 
       return arg instanceof rxjs_1.Observable; 
      }; 
      return SomeClass; 
     }()); 
     exports_1("SomeClass", SomeClass); 
    } 
} 

});

質問

私はそれが代わりにRxオブジェクトを渡すために取得する方法任意のアイデア?

答えて

2

'Rx'meta.rxjs.exportsの値としてsystem.configに追加すると、インポートするRxオブジェクトをその親ではなく選択することができます。必要に応じてドット表記を使用して、より深いオブジェクトを選択することもできます。

例として、exports: 'Rx.Observable'は、元の質問に翻訳されたコードでrxjs_1_1Observableに設定します。

だから、フルsystem.configは次のようになります。

System.config({ 
    transpiler: 'typescript', 
    paths: { 
     'src:*': '/src/*', 
     'npm:*': '/node_modules/*' 
    }, 
    map: { 
     'lib': 'src:lib', 
     'rxjs': 'npm:rxjs/bundles/Rx.js', 
     'typescript': 'npm:typescript/lib/typescript.js', 
     'systemjs': 'npm:systemjs/dist/system.src.js' 
    }, 
    packages: { 
     lib: { 
      defaultExtension: 'js' 
     } 
    }, 
    meta: { 
     rxjs: { 
      format: 'global', 
      exports: 'Rx' 
     } 
    } 
}); 
関連する問題