2017-03-20 58 views
3

我一直在爲我的Angular 2項目添加Jasmine單元測試,並且最近更新了一些NPM軟件包。我看到兩個不同的錯誤,我懷疑它們是相關的(因此在一個問題中將它們結合起來)。Angular2構建失敗,出現「無法找到名稱」文檔'「;其他參考資料也無法解決

首先,我得到一個構建錯誤,阻止我建立我的項目。當我在Angular-CLI中運行> ng build時,所有塊似乎都被正確創建,但是隨後我得到了一堵指向每個引用全局文檔或窗口變量的地方的錯誤。這些錯誤是這樣的:

example error

,或者替換地, 「無法找到名爲 '窗口'。」這些引用在Visual Studio中沒有被紅線標出,並且我一直在使用它們很長時間沒有問題,所以我猜這和最近更新我的Typescript版本有關。

同樣,在我的新測試文件中,所有Jasmine引用都會被標記爲未知名稱。

example of redlining in a jasmine test file

有趣的是,測試運行無投訴;只是Visual Studio將標記放在我的測試文件中。我瀏覽了許多關於這個問題的SO問題,發現沒有任何解決方案解決了我的問題。

這裏是我的tsconfig.json樣子:

tsconfig.json file

我已經簽了TypeRoots路徑是正確的,在安裝這些NPM模塊。

而且我的package.json:

package.json file

+0

它應該是''lib「:[」dom「,...]'在TS配置中。 – estus

+0

Angular 2沒有對TypeScript 2.2的官方支持,Angular 4將支持2.2。您的應用可能仍然有效,但它不受支持。當你運行'npm list --depth 0'時它是否會給你任何警告/錯誤? – Adam

+0

@Adam我得到三個錯誤:npm ERR! extraneous:[email protected] C:\ PowerPay \ Simplification \ EvoNowHostedApp \ EVONowHosted \ Static \ node_modules \ karma-remap-istanbul npm ERR! extraneous:[email protected] C:\ PowerPay \ Simplification \ EvoNowHostedApp \ EVONowHosted \ Static \ node_modules \ utf8 npm ERR! extraneous:[email protected] C:\ PowerPay \ Simplification \ EvoNowHostedApp \ EVONowHosted \ Static \ node_modules \ webdriver-manager –

回答

6

打字稿的配置應該有

"lib": ["dom", ...] 

爲了特定瀏覽器的全局中使用,包括document

爲了使用Jasmine全局變量,需要安裝@types/jasmine包。

+0

謝謝,這很好地解決了我的問題!在研究這個答案時,我還發現,如果我要從我的tsconfig中完全刪除lib屬性,編譯器會根據我的目標是es6的事實使用默認集合;這一套將包括dom和es2016以及其他一些圖書館。 (請參閱https://www.typescriptlang.org/docs/handbook/compiler-options.html) –

+0

從不會明顯指定'lib',因爲它通常取決於應用的polyfills,而不是目標。 – estus

相關問題