是否有任何选项可以使用 tsc 或 ts-node 或其他任何东西更快地编译和运行 ts 代码?
Posted
技术标签:
【中文标题】是否有任何选项可以使用 tsc 或 ts-node 或其他任何东西更快地编译和运行 ts 代码?【英文标题】:Is there any option to compile and run a ts code faster using tsc or ts-node or anything else? 【发布时间】:2020-02-20 23:55:44 【问题描述】:目前我们有客户端服务器应用程序(用于竞争性编码目的),客户端点击编译并运行并将 ts 代码发送到服务器,其中 ts 代码存储在文件中并在服务器上使用测试用例在本地运行,输出通过测试返回给客户端案例通过/失败结果。 但是运行 ts 文件很慢,而且要花很多时间。
我在 transpileonly 模式下使用 ts-node 在服务器本地编译和运行文件。
例如。 npx ts-node -T tsFileName.ts
我们的要求是固定在ts代码的编译和运行时间上。
【问题讨论】:
您使用的是哪个版本的ts-node
? 8.x 版本存在一些已知的编译性能问题。他们已经在这里讨论过:github.com/TypeStrong/ts-node/issues/754
我使用的是 8.4.1 版本的 ts-node 但我认为问题是由于 npx 它总是安装 ts-node 包。
如果你缓存了已安装的 npm 包,请尝试使用--no-install
标志运行npx
,这样可以避免重复安装,可能会帮助你发现问题
【参考方案1】:
选项 A
-
尝试在不同的文件中生成 TS 代码,例如:在单独的文件中动态拆分每个函数,或者要求用户“上传”不同的 ts 文件,每个文件的代码更少,也可以动态检查和限制每个函数或文件的行数
只需转换已更改的文件(这部分可以使用 watch 编译器选项轻松完成)
选项 B
试着玩一些compiler options
一些有趣的: 增量:true,noEmit:true,strict:false,skipLibCheck:true
【讨论】:
选项 A 怎么做?【参考方案2】:我添加了这些环境变量,启动时间从几秒变为毫秒:
TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node ./script.ts
考虑通过[sudo] npm install -g typescript ts-node
安装ts-node
,然后避免npx
为确保每次都安装ts-node
而采取的额外步骤。
【讨论】:
根据您的建议,我从 5 秒切换到 2 秒,非常感谢! 这应该是公认的答案。超级简单,而且很有魅力!您还可以将其保存为package.json
中的 npm 脚本。对于在项目中运行小工具非常有用。
如果您使用 TS_NODE_TRANSPILE_ONLY,您如何/何时进行类型检查?
我有一个 start
运行脚本,它添加了环境变量以加快迭代时间。我有 VSCode 可以在我写作时实时进行类型检查。我有一个build
运行脚本,它没有添加这些环境变量,并且在推动之前我运行它以进行良好的测量。当然,它也在 CI 中运行。【参考方案3】:
一种使用 nodemon 快速编译的方法
安装 Nodemon:npm i -g nodemon
创建文件nodemon.json
"watch": ["src"],
"ext": ".ts,.js",
"ignore": [],
"exec": "ts-node ./src/server.ts"
在package.json
中添加命令
"start:dev": "nodemon",
【讨论】:
【参考方案4】:您可以使用esbuild-runner
,这似乎要快得多。
npm install -g esbuild-runner
npm install -g esbuild
然后运行代码
esr src/index.ts
【讨论】:
光年快谢谢:)【参考方案5】:如果有人在 2021/22 年仍在寻找更好的方法来做到这一点,那么有一种更简单的方法可以实现这一目标。步骤如下:
将以下 docker-compose 文件添加到您的项目中:
version: '3'
services:
#this will watch typescript files and keep building them
#replace typescript version in command with the one you need
tsc:
image: 'node:14-alpine'
volumes:
- ./:/myapp
working_dir: /myapp
command: >
sh -c "npm install typescript@^3.9.3 -g && tsc --watch"
#this will watch build files and restart your app if any changes
#replace folders according to your dir structure
#replace app.js in command with appropriate filname like index.js
nodemon:
image: 'node:14-alpine'
volumes:
- ./:/myapp
- ./.env:/myapp/build/.env
working_dir: /myapp/build
network_mode: host
command: >
sh -c "npm install nodemon -g && nodemon app.js"
它的作用是,它将并行运行 typescript watcher 和 nodemon,并在几毫秒内持续构建您的代码。
将上述文件添加到项目后,只需运行
docker-compose up
【讨论】:
以上是关于是否有任何选项可以使用 tsc 或 ts-node 或其他任何东西更快地编译和运行 ts 代码?的主要内容,如果未能解决你的问题,请参考以下文章