私はng2のロープを学ぼうとしていますが、依存性注入システムが私を殺しています。
Ngクイックスタートを使用しています: https://github.com/angular/quickstart/blob/master/README.md
このパッケージをアプリにインポートしようとしています: https://www.npmjs.com/package/arpad 。 npm updateを介してパッケージをインストールしましたが、package.jsonの依存関係は次のようになります。
"dependencies": {
"angular2": "2.0.0-beta.9",
"systemjs": "0.19.24",
"es6-promise": "^3.0.2",
"es6-shim": "^0.35.0",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.2",
"zone.js": "0.5.15",
"arpad":"^0.1.2" <----- the package i'm trying to import
}
パッケージがコードをエクスポートする方法は次のとおりです。
module.exports = ELO;
次のようなモジュールをインポートするコンポーネントがあります。
import {ELO} from 'node_modules/arpad/index.js';
これは、systemJSがアプリケーションのindex.htmlでどのように構成されているかです。
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
},
map:{'arpad':'node_modules/arpad'} <---- here
});
System.import('node_modules/arpad/index.js'); <--- and here for good measure
System.import('app/main')
.then(null, console.error.bind(console));
</script>
今、私は暗闇の中で撮影しているように見えます、そしてそれはまさにアプリケーションコンソールのエラーメッセージが私にしたことです。次のようなコンポーネントでモジュールを使用しようとすると、次のようになります。
public elo = ELO;
constructor(){
this.score = this.elo.expectedScore(200, 1000);
---- there is more to the component but this is the part where it breaks
}
次のメッセージが表示されます。
"ORIGINAL EXCEPTION: TypeError: this.elo is undefined"
したがって、より広い範囲での質問は次のとおりです。
Ng2クイックスタートのモジュールローダーとしてsystemJS(またはWebpack、またはBrowserify)を使用して、コンポーネントまたはサービスで機能する特定のnpmパッケージ(まだangularモジュールではない)を取得するにはどうすればよいですか?
ここにいくつかコメントがあります:
モジュールに対して次のようにSystemJSを構成する必要があります。
_System.config({
map:{'arpad':'node_modules/arpad/index.js'}
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
}
});
_
アプリケーションをインポートする(_index.js
_モジュールをインポートする)前に、_app/main
_ファイル(System.import('node_modules/arpad/index.js');
を参照)をインポートする必要はありません。
elo
オブジェクトを次のようにインポートする必要があります。
_import * as Elo from 'arpad';
_
次に、モジュールを次のように使用できるようになります。
_constructor() {
this.elo = new Elo();
this.score = this.elo.expectedScore(200, 1000);
}
_
これを説明するプランカーは次のとおりです: https://plnkr.co/edit/K6bx97igIHpcPZqjQkkb?p=preview 。