簡體   English   中英

從Typescript編譯中排除引用?

[英]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文件的引用聲明的文件,了解更多關於我對此問題的看法:

你能創建Typescript包嗎? 比如c#dlls

所以現在當我運行構建腳本時,會發生以下步驟:


編譯核心

  1. 查找模型,服務,遷移文件夾和子文件夾中的所有* .ts文件
  2. 將所有以前的文件添加到數組中,並添加參考文件
  3. 使用類似於tsc.exe的命令運行tsc.exe tsc.exe --out <something>.core.js <previous_file_list>

為UI編譯

  1. 查找視圖模型,描述符文件夾和子文件夾中的所有* .ts文件
  2. 將所有以前的文件添加到數組中,並添加參考文件
  3. 使用如下命令運行tsc.exe: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM