我遇到問題安裝正確的js來自cdn網址,並通過查看超過10篇文章或帖子後,我找不到一個好方法來做到這一點。angular2 TS導入cds js與系統JS
我想要安裝在我的角度項目中使用的js文件是http://player.twitch.tv/js/embed/v1.js。目前,我只在我的index.html中加載了一個腳本標籤。
在組件文件中我有代碼,如this.player = new Twitch.Player("video-player", options);
,但是當我運行npm start
時,出現錯誤錯誤TS2304:找不到名稱'Twitch'。
奇怪的是,如果我註釋掉使用'Twitch'的行,我可以啓動我的服務器,然後在服務器運行時取消註釋行,然後應用程序正常運行,並使用Twitch播放器庫沒有任何問題。
我相信我需要將它安裝在system.config.js文件中,但是我找不到如何爲來自cdn的js(這不是通過npm提供的)執行此操作。我已經爲多個npm包做了這個,但是從cdn我有點失落。
我不是100%確定如果我需要在systemjs中做到這一點,所以如果這是不正確的,請忽略這篇文章的其餘部分,讓我知道你的建議 - 我只需要在js文件中的Twitch在我的應用程序中被識別和使用。
我發現了幾個不同的方法來嘗試這個。一個是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"
不像npm包那樣工作,如angular2-materialize,因爲它沒有映射到system.config.js文件中。不知道這種方式是否可行。
另一種方法是load it in the system.config.js file。有了這個方法,我添加了一個包含url的地圖對象給js文件。我想也許整個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編譯錯誤,這讓我足以讓谷歌更好。我需要聲明'Twitch:any;'然後它一切正常。我相信有一個更好的方法來做到這一點,但它現在起作用!謝謝。 – awwester