cdn URLから正しくjsをインストールするのに問題があります.10以上の記事や記事を見ても、それを行うには良い方法が見つかりません。angular2 TSのインポートcdn js with system JS
私の角プロジェクトで使用するためにインストールしたいjsファイルはhttp://player.twitch.tv/js/embed/v1.jsです。現在、私はそれをロードするindex.htmlにscriptタグを持っています。
this.player = new Twitch.Player("video-player", options);
などのコードがありますが、npm start
を実行すると、エラーが発生します。TS2304:「Twitch」という名前が見つかりません。
「Twitch」を使用する行をコメントアウトすると、サーバーが起動し、サーバーが実行されている間に行がコメントアウトされ、Twitchプレーヤーライブラリに問題はありません。
私はそれをsystem.config.jsファイルにインストールする必要があると思いますが、cdn(これはnpmで利用できません)から来るjsのための方法を見つけることができません。私は複数のnpmパッケージでこれを行っていますが、cdnから少し失われています。
私はsystemjsでこれを行う必要がある場合は100%確信していないので、それが正しくない場合は、この投稿の残りの部分を無視し、あなたの提案を教えてください - 私はちょうどjsファイル認識され、私のアプリ全体で使用することができます。
これを試してみるには、いくつかの方法があります。 1つはload the module directly from the urlです。
// index.html
<!-- 2. Configure SystemJS -->
<script src="systemjs.config.js"></script>
<script>
System.import('app').catch(function(err){ console.error(err); });
System.import('http://player.twitch.tv/js/embed/v1.js');
</script>
// main.js
import {bootstrap} from '@angular/platform-browser-dynamic';
import {AppComponent} from './app.component';
import "angular2-materialize";
import "twitch-api";
このアプローチでは、アプリケーションに読み込む方法がわかりません。 import "twitch-api"
は、angle2-materializeなどのnpmパッケージと同じように動作しません。これは、system.config.jsファイルにマップされていないためです。この方法が可能かどうかはわかりません。
他の方法はload it in the system.config.js fileです。このメソッドでは、jsファイルにurlを持つマップオブジェクトを追加します。おそらく、system.config.jsファイル全体が関連していると思いますので、以下にすべて貼り付けていきます。
main.tsで私は上記と同じことをしますimport "twitch-api";
これらの変更を行った後も、サーバーを起動しようとすると同じエラーメッセージが表示されますTS2304: Cannot find name 'Twitch'
。
var map = {
'app': 'app', // 'dist',
'rxjs': 'node_modules/rxjs',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'@angular': 'node_modules/@angular',
"materialize-css": "node-modules/materialize-css",
"materialize": "node_modules/angular2-materialize",
"angular2-materialize": "node_modules/angular2-materialize",
"angular2-localstorage": "node_modules/angular2-localstorage",
"twitch-api": "http://player.twitch.tv/js/embed/v1.js"
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' },
"materialize-css": { main: "dist/js/materialize" },
"materialize": { main: "dist/materialize-directive", defaultExtension: "js" },
"angular2-localstorage": {main: "index.js", defaultExtension: 'js'},
"twitch-api": {}
};
var packageNames = [
'@angular/common',
'@angular/compiler',
'@angular/core',
'@angular/http',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
'@angular/router',
'@angular/router-deprecated',
'@angular/testing',
'@angular/upgrade',
''
];
// add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' }
packageNames.forEach(function(pkgName) {
packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
});
var config = {
map: map,
packages: packages
}
System.config(config);
ねえ、一緒に置いてくれてありがとう。この答えは正確には「正しい」わけではありませんが、TSコンパイルエラーであり、Googleよりも十分に優れていると言われました。 「Twitch:any;」と宣言する必要があり、それですべてうまく動作します。私はそれを行うためのよりよい方法があると確信していますが、今のところうまくいきます!ありがとう。 – awwester