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