2017-03-20 25 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

相关问题