2016-07-04 92 views
0

我正在尝试Angular 2 RC4编译器cli让项目组件脱机编译,我遇到了这里的一些问题。Angular 2 RC 4编译器cli错误

只是一个通知,我使用可以在这里找到方向:http://blog.mgechev.com/2016/06/26/tree-shaking-angular2-production-build-rollup-javascript/

所以,我的布局是,我们这里有所有已出口了ES5目标与几个私人NPM包该包的es2015版本嵌套在esm文件夹中,jsnext:指向esm/core.js的主标签。

因为这样做,我正在构建一个成功加载这些外部模块并创建一个实际运行没有问题的应用程序的项目。为了使它更好,我想要应用上面提到的所有Web post中描述的技术。

为了做到这一切的,我已经创建,设置目标和模块ES2015一个tsconfig文件并运行:

node_modules/.bin/ngc -p . 

而且我做这个Linux构建服务器上。

问题,这一切的设置是,由于某种原因,一些外部包描述的部件无法得到妥善的NGC解析,我得到:

Error: No Directive annotation found on *external component* 

错误按每次使用位于核心封装组件。

所以,任何人都可以指出我这个设置有什么问题,怎么解决?

我真的很想看到大小如何包看起来像在最终布局...

而且,我注意到一些的例子@Component装饰中使用moduelId,但我还没有看到任何需要为此,至少现在 - 可能是这是一个问题?

PS

如果我忽略这些错误,并尝试去我看到这是包括任何产生错误的外部组件的所有组件,* .ngfactory.ts作为空文件生成。

PPS

或者我可以从纯ts文件编译所有的项目。但后来我遇到了一个主要问题,就是如何将所有对my-local-core的引用重定向到某个包含ts源文件的本地文件夹,因为该模块已经映射到node-modules文件夹。

回答

1

所有这一切的答案在于,角度编译器cli仍然没有处于能够脱机编译比hello世界项目更大的任何东西的状态。 首先,有一个误解的主要原因,就是如何在没有预编译的情况下部署角色组件时,如何解析模板URL的方式,这些URL将从网页URL中获取为全局URL。虽然预编译的所有URL都是相对于组件ts文件而言的 - 所以如果我们使用绝对URL,我们没有脱机编译,但是如果我们使用相对URL,它将不能在非预编译模式下工作。 其次,外部包中定义的任何组件都不能被解析为其预编译版本,因为编译器cli不知道如何处理它的传输JavaScript版本。这也适用于不同的模块格式,包括es2015。 第三,ngc无法解析自定义装饰器和功能,在遇到tsc刹车时遇到“遇到解析符号值时遇到错误”,因为它遇到它的任何实例。

期待RC 5或最有可能的最终版本的Angular2。