【发布时间】:2013-04-09 10:37:47
【问题描述】:
我有一个奇怪的(但在我看来是明智的)场景。
我有一个网站、移动应用程序,也许还有一个用 Javascript 编写的网络服务器。我有大量的功能在所有这些系统之间共享。这种共享的东西可以是模型、存储库、业务逻辑等。
如果我们排除网络服务器位,因为这是一个未来的想法,网络应用程序的目录结构如下:
app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
现在这些应用程序中的每一个都分为 2 个区域,核心和 ui 部分,核心是可重复使用的东西,例如 models, services, migrations,而 ui 东西仅用于包含 @987654326 的应用程序@(如果您想知道视图都是 html,资产是 css、图像等)。
在我采用 typescript 之前,我有一个构建脚本,它基本上可以将所有核心文件组合在一起并缩小它们。然后它将所有 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 文件夹会被包含所有本地引用的构建脚本自动填充,因此它将在整个目录树中查找所有打字稿文件并构建一个巨大的引用文件,该文件是一个充满引用声明的文件本地打字稿文件,以了解有关查看此问题的更多信息:
Can you create Typescript packages? like c# dlls
所以现在当我运行构建脚本时,会发生以下步骤:
为核心编译
- 在模型、服务、迁移文件夹和子文件夹中查找所有 *.ts 文件
- 将所有以前的文件添加到一个数组中并添加参考文件
- 使用类似
tsc.exe --out <something>.core.js <previous_file_list>的命令运行 tsc.exe
为 UI 编译
- 在视图模型、描述符文件夹和子文件夹中查找所有 *.ts 文件
- 将所有以前的文件添加到一个数组中并添加参考文件
- 使用类似
tsc.exe --out <something>.ui.js <previous_file_list>的命令运行 tsc.exe
现在我希望这会输出 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 相关的废话。
那么有没有办法获得引用但不将它们输出到生成的 javascript 文件中?
【问题讨论】:
-
How can typescript generate single one javascript file without reference typescript file code 的可能副本 - 尽管我认为您最好使用模块加载器,而不是摆弄所有这些文件并将其中一些文件组合起来。
-
我根据客户端/平台使用 LabJS(或 YepNope),稍后加载组合的东西,构建脚本和应用程序非常复杂,但是我已将其简化为一个简单的问题,如前所述多于。你是对的,它基本上是你链接到的问题的一个更详细的版本。此处生成的代码也用作其他人为系统制作插件的合同,因此我生成这些文件不仅用于运行时,还用于 3rd 方合同。
-
我认为上面的链接问题很相似,stackoverflow.com/questions/13461758/… 也很相似。然而,所有这些感觉就像编译器在 --out 参数上进行批量包含的工作,而不仅仅是包含传递的文件。有谁知道这是否正在编译器中解决,因为我记得读过,如果您有一个引用另一个文件并且您构建该单个文件的文件很好,则不包含任何引用,但是如果您对 --out 执行相同操作标记它将包括两者。
标签: javascript reference typescript build-script