2016-07-04 89 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。