[英]Excluding references from Typescript compilation?
我有點奇怪(但在我看來是明智的)情景。
我有一個網站,移動應用程序,可能還有一個用Javascript編寫的Web服務器。 我有很多功能,在所有這些系統之間共享。 這個共享的東西將是模型,存儲庫,業務邏輯等。
如果我們排除Web服務器位,因為這是未來的想法,Web應用程序具有如下目錄結構:
app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
現在每個應用程序分為2個區域,核心和ui部分,核心是可重用的東西,如models, services, migrations
和ui東西僅用於包含view-models, descriptors
應用程序view-models, descriptors
(如果您想知道視圖都是html,資產是css,圖像等)。
在我采用打字稿之前,我有一個構建腳本,它基本上將所有核心文件組合在一起並縮小它們。 然后它將所有UI組合在一起並縮小它們。 那么在移動應用程序中,我可以使用my-app.core.min.js
,每個人都很高興,我正在重用主Web應用程序中的所有可重用組件。 但是我不需要ui的東西,因為移動UI與主要的web ui完全不同,並且Web服務甚至不會有UI向前發展。
通過解釋上下文,我們可以回到手頭的Typescript問題。 目前,打字稿文件是由tsc.exe
(版本0.83)通過構建腳本編譯的,該腳本只包含交互。
所以在新的Typescript世界中,結構現在有一個像這樣的引用文件夾:
app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
|- references <- NEW ONE!
這個references
文件夾由構建腳本自動填充所有本地引用,因此它將遍歷整個目錄樹查找所有typescript文件並構建一個巨大的引用文件,該文件是一個充滿本地typescript文件的引用聲明的文件,了解更多關於我對此問題的看法:
所以現在當我運行構建腳本時,會發生以下步驟:
編譯核心
tsc.exe --out <something>.core.js <previous_file_list>
為UI編譯
tsc.exe --out <something>.ui.js <previous_file_list>
現在我希望這個輸出2個文件my-app.core.js
只包含核心文件,而my-app.ui.js
只包含ui文件。 然而他們都包括一切......
在考慮了這個之后,它必須歸因於引用,因為它們都引用了所有文件,但這只是我眼中的編譯依賴,而不是需要使用輸出的javascript編譯的東西。 在c#/ java中,您不希望將引用的dll / jar編譯到輸出的dll / jar中,它只是一個運行時依賴項,這是必需的。
我試過有兩個單獨的參考文件,一個用於核心,一個用於ui,但由於ui將依賴於核心我得到同樣的問題,盡管至少這樣my-app.core.js
沒有任何ui相關的guff 。
那么是否有一種方法可以獲得引用但是沒有將它們輸出到生成的javascript文件中?
您可以通過為TypeScript文件生成定義文件來完成此任務:
tsc --declaration FileName.ts
在構建腳本中,對每個TypeScript文件執行此操作,並使用生成的FileName.d.ts作為引用而不是FileName.ts
我有以下文件:
-BusinessObjects
--Product.ts
--Customer.ts
--Order.ts
--BusinessObjects.d.ts
BusinessObjects.d.ts看起來像這樣:
/// <reference path="Customer.d.ts" />
/// <reference path="Order.d.ts" />
/// <reference path="Product.d.ts" />
對於Product,Customer和Order,每個都有對BusinessObjects.d.ts的引用
當我跑:
tsc --out combine.js Customer.ts Order.ts
輸出僅引用客戶和訂單,不包括產品。 當我直接在我的BusinessObjects.d.ts文件中引用* .ts文件時,但組合輸出確實包含了不需要的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.