reference - 你能创建 Typescript 包吗?像 c# dll

标签 reference typescript

目前有打包 typescript 文件的概念吗?

在尝试将纯 javascript 项目迁移到 typescript 时,我感到很痛苦的一件事是引用,在某些情况下,当我有复杂的对象时,我不得不编写几个引用语句从各处拉取文件.

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

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

还有很多,但你明白了,现在核心被每个模块使用,但是对于 javascript 我只是希望它在运行时加载,这仍然需要发生,但是由于 typescript 问题只是在编译时我想知道是否有一些想法将所有 typescript 文件打包到某个 typescript 库或其他东西中,然后可以从项目中引用它而不是让 module1 模型引用核心模型等。

目前的问题围绕着目录结构,因为命名空间工作正常,但如果我移动一个文件,我需要转到每个引用该移动文件的文件并更新它。这很烦人,而如果有某种包的想法,那么我可以在它的输出后引用它,所以我不再担心文件系统和目录,我只担心包和命名空间。

我认为其中很多与 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 等)中的每个文件,然后它会输出一个本地文件.references.ts 到该目录中的引用文件夹中。然后我手动编写了一个 external.references.ts,它在任何需要的地方引用外部描述符或其他模块引用。

这部分完成后,当我编译我的 typescript 时,我基本上再次将它指向根目录并告诉它将它们全部编译(*/.ts)到一个大的 js 文件(即模块 1.js)。现在因为这将自动包含本地和外部引用,所以我不需要在各个类中放置任何引用声明。

因此,通过这种方式提供的本地和外部引用文件(local.reference.ts、external.reference.ts)包含在文件的批量处理中,您只需担心命名空间,使其与C# 将如何运行。

但是,如果您没有能够进行本地引用生成和 typescript 编译的构建脚本,那么给出的评论链接将是一个不错的选择。

最佳答案

目前没有正式的流程将您的源 typescript 文件打包为您所描述的预构建库。

目前有几种不同的解决方案,很像评论中链接的解决方案,它允许您将所有引用放入中央 typescript 文件,然后只需从您的个人脚本或您提出的方法中引用它们同样的方法,但不是手动编写它,而是让构建脚本为您生成引用,并让编译过程将引用注入(inject)而不是在每个文件中显式引用它们。

随着 Typescript 变得越来越成熟,可能会有更正式的方法来执行此操作,但目前只需根据您的工具和使用 Typescript 进行开发的方法,选择最适合的解决方案。

关于reference - 你能创建 Typescript 包吗?像 c# dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664032/

相关文章:

javascript - 将js文件导入到ts文件中

vb.net - 如何添加一个项目作为另一个项目的引用

C++ 引用变量的初始化

rust - 为什么不能在同一结构中存储值和对该值的引用?

javascript - 在 Angular 中访问子项

css - 无法让 css 模块在 Typescript Storybook 元素中工作

c# - C++ 与 C# BadPointer/BadReference?

c# - 引用类型的非初始化与空值

typescript - 枚举反向查找

javascript - typescript 使用逻辑运算符为变量赋值