正在将由许多文件/模块组成的TypeScript项目编译为单个文件

bkhjykvo  于 2022-11-26  发布在  TypeScript
关注(0)|答案(3)|浏览(140)

我正在编写一个TypeScript应用程序,需求要求将其编译为一个文件;我不想失去定义模块的机会,为了让项目更容易管理,我想把它们放在多个文件中。

import _option = require("Option.ts")

不工作,因为它需要CommonJS或AMD,我不能使用。有没有办法在一个项目中使用多个文件和模块,但仍然编译成一个文件,而不使用CommonJS或AMD?
我试图使用tsc transpiler选项—out FILE来生成一个文件,但是当您在任何文件中的任何地方使用export关键字时,它会阻塞。

ctehm74n

ctehm74n1#

为了使用合适的(外部)模块,然后输出一个文件,最好的方法是将r.js这样的AMD构建器与TypeScript编译器输出的AMD模块结合起来。从TypeScript编译成单个JavaScript文件,然后r.js将其构建成一个单层文件。
在你说这不是你真正想要的之前,你可能也想缩小你的代码,对吗?在这种情况下,TypeScript编译器不会做你需要的,但是r.js会。因为你无论如何都需要额外的构建步骤,所以使用合适的外部模块,并将其构建到一个文件中作为构建过程的一部分,而不是做你在自己的答案中提出的事情。

sq1bmfud

sq1bmfud2#

解决方案是使用“在ts文件顶部的///<reference path="reference.ts"/>”方法。有很多关于AMD和CommonJS的东西,包括模块,虽然这使得找出它很困难。
因此,为了详细说明该解决方案,给定三个文件main.tsB.tsC.ts,其中C.ts使用B.ts中的类/模块,main.ts同时使用这两个类/模块,这样就可以:
C.ts中:

///<reference path="B.ts"/>
module C {
  class Foo {}
}

main.ts中:

///<reference path="B.ts"/>
///<reference path="C.ts"/>

// Use modules directly
var a = new C.Foo();

然后从命令行使用tsc --out file.js main.ts,它将传递地拉入所有依赖项并将它们组合起来。* 注意 * 文件中不能有任何根级别的export语句,否则它们将不会包含在文件输出中;相反,文件中所有定义的模块/类都可以访问,而不需要使用export关键字。如果您过去依赖于一个表示模块的文件,那么现在您需要将该内容 Package 在一个module X { /* original file code here */}类型声明中。
这种方法的另一个优点是,它允许像IntelliJ这样的IDE检查所有类型,并为每个文件给予正确的自动完成和错误检测。
如果您希望在所有地方都包含 * 很多 * 文件,则可能值得使用"single references.ts file" approach,其中您在一个文件中列出所有引用并引用该文件。

5vf7fwbs

5vf7fwbs3#

您可以使用一些构建工具,如esbuild
1.使用npm init -ynpm i esbuild安装esbuild。
1.在package.json中添加2个命令:

"scripts": {
    "build": "esbuild  index.ts --platform=node --format=esm --bundle --outfile=index.mjs",
    "start": "node index.mjs"
  },

1.运行npm run buildnpm start
我使用的是节点v16.14.0。

相关问题