从Typescript编译中排除引用?

Gro*_*fit 4 javascript reference build-script typescript

我有点奇怪(但在我看来是明智的)情景.

我有一个网站,移动应用程序,可能还有一个用Javascript编写的Web服务器.我有很多功能,在所有这些系统之间共享.这个共享的东西将是模型,存储库,业务逻辑等.

如果我们排除Web服务器位,因为这是一个未来的想法,Web应用程序有一个这样的目录结构:

app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
Run Code Online (Sandbox Code Playgroud)

现在每个应用程序分为2个区域,核心和ui部分,核心是可重用的东西,例如,models, services, migrationsui的东西只用于那个应用程序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!
Run Code Online (Sandbox Code Playgroud)

references文件夹由构建脚本自动填充所有本地引用,因此它将遍历整个目录树查找所有typescript文件并构建一个巨大的引用文件,这是一个充满本地typescript文件的引用声明的文件,可以查找了解更多关于我对此问题的看法:

你能创建Typescript包吗?比如c#dlls

所以现在当我运行构建脚本时,会发生以下步骤:


编译核心

  1. 查找模型,服务,迁移文件夹和子文件夹中的所有*.ts文件
  2. 将所有以前的文件添加到数组中,并添加参考文件
  3. 用这样的命令运行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中,它只是一个运行时依赖项,这是必需的.

我试过有2个单独的参考文件,一个用于核心,一个用于ui,但由于ui将依赖于核心我得到同样的问题,尽管至少这样,my-app.core.js没有任何与ui相关的guff.

那么是否有一种方法可以获得引用但是没有将它们输出到生成的javascript文件中?

dmc*_*mck 5

您可以通过为TypeScript文件生成定义文件来完成此任务:

tsc --declaration FileName.ts
Run Code Online (Sandbox Code Playgroud)

在构建脚本中,对每个TypeScript文件执行此操作,并使用生成的FileName.d.ts作为引用而不是FileName.ts

我有以下文件:

-BusinessObjects
--Product.ts
--Customer.ts
--Order.ts
--BusinessObjects.d.ts
Run Code Online (Sandbox Code Playgroud)

BusinessObjects.d.ts看起来像这样:

/// <reference path="Customer.d.ts" />
/// <reference path="Order.d.ts" />
/// <reference path="Product.d.ts" />
Run Code Online (Sandbox Code Playgroud)

对于Product,Customer和Order,每个都有对BusinessObjects.d.ts的引用

当我跑:

tsc --out combine.js Customer.ts Order.ts
Run Code Online (Sandbox Code Playgroud)

输出仅引用客户和订单,不包括产品.当我直接在我的BusinessObjects.d.ts文件中引用*.ts文件时,但组合输出确实包含了不需要的文件.