Angular 2 RC 4编译器cli错误

时间:2016-07-04 14:35:37

标签: angular

我正在尝试使用Angular 2 RC4 compiler-cli来获取离线编译的项目组件,我在这里遇到了一些问题。

只是为了通知,我正在使用可在此处找到的路线:http://blog.mgechev.com/2016/06/26/tree-shaking-angular2-production-build-rollup-javascript/

所以,我的布局是我们在这里有几个私有的npm软件包,所有这些软件包都是为es5目标导出的,es2015版本的软件包嵌套在esm文件夹中,而jsnext:main标签就位于esm / core的.js。

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

为了完成所有这些,我创建了一个tsconfig文件,将目标和模块设置为es2015并运行:

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 个答案:

答案 0 :(得分:1)

对所有这些的回答是,angular compiler-cli仍然没有能够进行比hello world项目更大的任何东西的离线编译。 首先,存在一个误解的主要原因,即如何解析模板URL,如果在没有预编译的情况下部署角度组件,那么这些URL将被视为全局URL,源自网页URL。虽然在预编译时,所有URL都被视为相对于组件ts文件 - 所以如果我们使用绝对URL,我们没有离线编译,但如果我们使用相对URL,它将无法在非预编译模式下工作。 其次,外部包中定义的任何组件都无法解析为其预编译版本,因为compiler-cli不知道如何处理它的转换JavaScript版本。这适用于包括es2015在内的不同模块格式。 第三,ngc无法解析自定义装饰器和功能,这些装饰和功能在tsc制动器中运行良好,并且“遇到错误时会遇到任何实例”。

期待RC 5或最有可能最终发布Angular2。