我正在编写一个TypeScript应用程序,需求要求将其编译为一个文件;我不想失去定义模块的机会,为了让项目更容易管理,我想把它们放在多个文件中。
import _option = require("Option.ts")
不工作,因为它需要CommonJS或AMD,我不能使用。有没有办法在一个项目中使用多个文件和模块,但仍然编译成一个文件,而不使用CommonJS或AMD?
我试图使用tsc
transpiler选项—out FILE
来生成一个文件,但是当您在任何文件中的任何地方使用export
关键字时,它会阻塞。
3条答案
按热度按时间ctehm74n1#
为了使用合适的(外部)模块,然后输出一个文件,最好的方法是将r.js这样的AMD构建器与TypeScript编译器输出的AMD模块结合起来。从TypeScript编译成单个JavaScript文件,然后r.js将其构建成一个单层文件。
在你说这不是你真正想要的之前,你可能也想缩小你的代码,对吗?在这种情况下,TypeScript编译器不会做你需要的,但是r.js会。因为你无论如何都需要额外的构建步骤,所以使用合适的外部模块,并将其构建到一个文件中作为构建过程的一部分,而不是做你在自己的答案中提出的事情。
sq1bmfud2#
解决方案是使用“在ts文件顶部的
///<reference path="reference.ts"/>
”方法。有很多关于AMD和CommonJS的东西,包括模块,虽然这使得找出它很困难。因此,为了详细说明该解决方案,给定三个文件
main.ts
、B.ts
和C.ts
,其中C.ts
使用B.ts
中的类/模块,main.ts
同时使用这两个类/模块,这样就可以:在
C.ts
中:在
main.ts
中:然后从命令行使用
tsc --out file.js main.ts
,它将传递地拉入所有依赖项并将它们组合起来。* 注意 * 文件中不能有任何根级别的export
语句,否则它们将不会包含在文件输出中;相反,文件中所有定义的模块/类都可以访问,而不需要使用export
关键字。如果您过去依赖于一个表示模块的文件,那么现在您需要将该内容 Package 在一个module X { /* original file code here */}
类型声明中。这种方法的另一个优点是,它允许像IntelliJ这样的IDE检查所有类型,并为每个文件给予正确的自动完成和错误检测。
如果您希望在所有地方都包含 * 很多 * 文件,则可能值得使用"single
references.ts
file" approach,其中您在一个文件中列出所有引用并引用该文件。5vf7fwbs3#
您可以使用一些构建工具,如esbuild。
1.使用
npm init -y
和npm i esbuild
安装esbuild。1.在package.json中添加2个命令:
1.运行
npm run build
和npm start
。我使用的是节点v16.14.0。