Angular CLI的那些“坑”
在进行angular-cli项目迁移的时候,特别是项目比较复杂的时候,很容易掉坑。下面我就自己的实践经验总结一下自己在进行CLI迁移的时候掉过的一些坑 1.Module build failed: Error: Angular Compiler was detected but it was an instance of the wrong class. This likely means you have several @ngtools/webpack packages installed. You can check this with 2.JavaScript Heap Out of Memory 3.各种版本冲突 4.多环境编译 export const environment = { production: true }; 在入口js文件中添加: if (environment.production) { enableProdMode(); } ng build或者ng serve时加参数说明使用何种环境配置: 5.Angular和CLI的版本如果不一致可能会出现一些很奇怪而无法解释的问题,一般来说,CLI1.6.3是和Angular5兼容的比较好的,但是如果之前的项目是Angular4写的话,需要升级到Angular5,然而升级的过程也是一个不断解决兼容性问题的过程,“Angular Update Guide”这篇文章给出了一些升级中的注意的问题。 6.我还遇到一个比较诡异的错误,运行ng命令的时候报如下错误: module.js:471 throw err; ^ Error: Cannot find module 'rxjs/operators/map' 一开始我一直以为是npm或者cli有问题,其实是rxjs的版本不对,升级到5.5.2以上就能解决这个问题了。 7.Unit Test迁移到Angular CLI上也会出现各种各样的问题,我们首先来梳理一下Angular CLI是如何启动Unit Test的。入口自然还是.angular.cli.json的"test":"test.js","test.js"一般都是标准写法,它会去启动karma,其中karma的配置文件也是在.angular.cli.json中指定的。“test”: { "karma": { "config": "...."}}。最主要的就是karma的配置文件了,有以下几点需要注意的地方:(1)basePath,强烈建议不要空着,虽然后续的文件地址有方法去覆盖它,但是如果你用到了karma-fixture,如果你的basePath是空的,那么karma-fixture的文件映射会以绝对路径作为key,那么在spec文件中loadFixture的时候就会因为找不到对应的key而报错。(2)frameworks: 最好加上@angular/cli(3)plugins:除了用到的插件如karma-fixture,karma-json-fixtures-preprocessor等要引入进来以外,最好引入@angular/cli/plugins/karma.(4)files:需要引入的一些文件,如第三方的js库文件,HTML文件,JSON文件等等,但是HTML和JSON需要转化为JS文件,Karma才可以处理,所以需要preprocessors去指定用什么插件去把HTML和JSON转化成JS。(5)preporcessors: 指定插件对HTML和JSON等非JS文件进行预处理,转化成JS文件,以便Karma框架去调用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |