还没有开始使用jigsaw,但我翻看了一些代码,以我有限的经验来看,jigsaw目前的代码应该是与AOT编译不兼容的,如果我的结论没有错的话,这个问题还是需要尽早解决的。
Activity
rdkmaster commentedon Jul 23, 2017
能说具体一点不?这方面我们确实可能还有问题
jackjoy commentedon Jul 23, 2017
就是使用AOT编译模式时ng build -prod --aot会报错(我没实际试过,但看代码应该会是这样)。有一条最简单的规则是模板中出现的组件属性和方法必须是public的,不能是private的。
rdkmaster commentedon Jul 23, 2017
哦,这个我们有全部修改过了。一开始我们也是以为模板是用到的所有变量都必须是public,实际上不是,有的可以是private的,具体哪些可以是private暂时没搞清楚。
你看jigsaw代码中,所以的
_$
开头的变量,都是在模板中用到,且不得不定义成public的jackjoy commentedon Jul 23, 2017
以我的理解,非AOT编译方式可以是私有的,编译没有问题。但如果是Aot编译方式,必须是public的,我粗看了下,有些模板中还有私有变量,如tab.html。因为电脑不在身边没法实际去试,但感觉去做AOT编译会有问题。
angular/angular#12981
https://stackoverflow.com/questions/39378643/angular-2-ahead-of-time-compiler-must-i-make-all-class-properties-public
rdkmaster commentedon Jul 23, 2017
我明天找人看看这个事情,测试一下
jackjoy commentedon Jul 23, 2017
这篇文章有详细的解释以及如何利用getter和setter来保证封装的良好实现。
http://blog.mgechev.com/2016/08/14/ahead-of-time-compilation-angular-offline-precompilation/#the-context-property
rdkmaster commentedon Jul 23, 2017
想起来,我们的CI流程里,有一个流程是将jigsaw主工程的被测demo和jigdaw-seed工程融合后,执行
ng build --prod
以aot方式编译后,再执行我们的e2e测试用例,所以你这个issue说的问题应该是不存在的。详见.travis.yml#L38
,现在被注释掉是一个误操作,等 PR #111 会修复这个问题