你能创建Typescript包吗?类似于C# DLL。

4

目前有没有任何对typescript文件进行打包的概念?

当前,我在尝试将一个纯JavaScript项目迁移到TypeScript时,遇到了一些烦恼,其中之一是引用。在某些情况下,当我有复杂的对象时,我不得不编写多个引用语句,从各处获取文件。

部分原因是我的项目布局,因为它是一个相当大且模块化的项目,所以我有这样的系统:

- modules
  |- module1
     |- models
     |- services
     |- controllers
  |- module2
     |- models
     |- services
     |- controllers
  |- core
     |- models
     |- services
        |- data
        |- validation

还有很多内容,但你已经明白了,现在每个模块都使用核心模块,不过用 JavaScript 的话我只希望它在运行时被加载,这仍然需要发生。然而,由于 TypeScript 的关注点实际上只在编译时,所以我想知道是否有将所有 TypeScript 文件打包成某种 TypeScript 库的概念,然后可以从项目中引用它,而不是让模块1模型引用核心模型等。
目前的问题围绕着目录结构,因为命名空间工作得很好,但如果我移动一个文件,我需要去更新引用该移动文件的每个文件。这很繁琐,而如果有某种包的想法,那么一旦输出了这个包,我就可以只引用它,这样我就不再担心文件系统和目录,只关心一个包和命名空间。
我认为很多这些都与 C# 的工作方式非常相似,你有一个项目,它有引用。然后该项目中的每个文件都可以使用引用中的任何类,因此代码展示由引用和命名空间管理。
我考虑让我的构建脚本只制作一个本地 references.ts 文件,然后循环遍历相关模块中的每个 *.ts 文件,并将它们放入一个大文件中:
///<reference path="core/models/some-model.ts"/>
///<reference path="core/models/some-model-2.ts"/>
///<reference path="core/services/some-service.ts"/>

像上面展示的那样,然后在所有需要核心文件的typescript文件中使用这个参考文件,因此它作为一种项目级别的参考,这可能意味着一些文件具有它们不需要的引用,但它是编译时所以我并不真正关心...
如果已经存在一个好的方法来解决这个问题,我就不想手动解决了。希望这样说起来有意义...
==编辑==
我只是想把这个放在这里,因为对于我的场景来说,它节省了我大量的时间,并且将我的引用缩减了99%,但这对于没有构建脚本的人可能不适用。
现在假设您有一个构建脚本,我采取了一个步骤,在我的脚本中,每一个根级目录中的文件(在这种情况下是module1、module2等)都会输出一个local.references.ts到该目录下的references文件夹中。然后我手动编写了一个external.references.ts,它引用了外部描述符或其他模块的引用,无论何时需要。
完成这个部分后,当我编译我的typescript时,我基本上再次指向根目录,并告诉它将它们全部编译成一个大的js文件(即module1.js)。现在,因为它会自动包含本地和外部引用,所以我不需要在单独的类中放置任何引用声明。
因此,只要本地和外部参考文件(local.reference.ts、external.reference.ts)被包含在文件的批量处理中,您就只需要担心命名空间,这使它几乎与C#的操作方式相同。
但是,如果您没有能够生成本地参考并编译typescript的构建脚本,那么给出的评论链接可能是一个不错的选择。

1
我强烈推荐这里概述的方法:https://dev59.com/T2Up5IYBdhLWcg3wVWmv#15336006。您可以每个目录或每个逻辑目录集合拥有一个“references.ts”。 - Ryan Cavanaugh
啊,是的,这与我目前采取的方法非常相似,尽管构建脚本正在生成我的“local.reference.ts”文件,其中包含该项目中所有文件的大型引用列表。 - Grofit
在发现多个文件的编译过程将考虑每个文件的所有引用,而不仅仅是我添加的单个引用后,我进行了编辑,可以正确地删除每个文件的所有单个引用。并且,这也会使您的构建更加流畅,因为您不依赖于IDE或NodeJS等工具。 - Grofit
1个回答

1

目前还没有像您描述的那样将您的源TypeScript文件打包为预构建库的正式流程。

目前有几种不同的解决方案,就像评论中链接的解决方案一样,它将允许您将所有引用放入中央TypeScript文件中,然后只需从您的各个脚本中引用它们,或者您提出的方法,其中您采取相同的方法,但与其手动编写,您可以让构建脚本为您生成引用,并使编译过程注入引用,而不是在每个文件中明确引用它们。

随着TypeScript变得更加成熟,可能会有更正式的方法来完成这项工作,但目前只需根据您的工具和使用TypeScript开发的方法选择最适合您的解决方案即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接