4

目前我们有客户端服务器应用程序(用于竞争编码目的),客户端点击编译并运行并将 ts 代码发送到服务器,其中 ts 代码存储在文件中并在服务器上使用测试用例在本地运行,输出通过测试用例返回给客户端/失败的结果。但是运行 ts 文件非常慢,这需要很长时间。

我在 transpileonly 模式下使用 ts-node 在服务器本地编译和运行文件。

例如。npx ts-node -T tsFileName.ts

我们的要求是固定在 ts 代码的编译和运行时。

4

6 回答 6

14

我添加了这些环境变量,启动时间从几秒变为毫秒:

TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node ./script.ts

考虑ts-node通过安装[sudo] npm install -g typescript ts-node,然后您就避免了npx确保ts-node每次都安装的额外步骤。

于 2020-11-06T15:26:37.333 回答
3

您可以使用esbuild-runner它看起来要快得多。

npm install -g esbuild-runner

npm install -g esbuild

并运行代码 esr src/index.ts

于 2021-06-30T23:56:57.687 回答
1

如果有人在 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
于 2021-08-27T11:02:03.143 回答
0

TS-Node 官方推荐

官方 TS-Node 文档概述了一些性能建议,其中一些其他人已经发表了评论。

https://typestrong.org/ts-node/docs/performance/

但是,我很惊讶没有人提到 SWC 集成!从文档:

使用我们的swc集成。 这是迄今为止最快的选择

快速 Web 编译器 (SWC)

SWC,或 Speedy Web Compiler,是一个完全用 Rust 编写的 JavaScript/TypeScript 转译器。因此,它比您从 tsc 或 babel 等替代方案中获得的任何东西都要快得多。

根据 SWC 网站 ( https://swc.rs/ ):

SWC 在单线程上比 Babel 快 20 倍,在四核上快 70 倍。

使用 TS-Node 设置

将 SWC 核心库添加到您的项目中:

npm i -D @swc/core

并将以下内容添加到您的 tsconfig.json 中:

{
  "ts-node": {
    "swc": true
  }
}

你很高兴去!享受极快的转译。

于 2022-02-17T17:15:05.470 回答
0

一种使用 nodemon 快速编译的方法

  1. 安装 Nodemon:npm i -g nodemon

  2. 创建文件nodemon.json

    {
     "watch": ["src"],
     "ext": ".ts,.js",
     "ignore": [],
     "exec": "ts-node ./src/server.ts"
    }
    
  3. 添加命令package.json

    "start:dev": "nodemon",
    
于 2020-11-09T18:00:27.053 回答
0

选项 A

  1. 尝试在不同的文件中生成 TS 代码,例如:在一个单独的文件中动态拆分每个函数,或者要求用户“上传”不同的 ts 文件,每个文件的代码更少,也可以动态检查和限制行数每个函数或文件
  2. 只需转换已更改的文件(这部分可以使用 watch 编译器选项轻松完成)

选项 B

尝试使用一些编译器选项

一些有趣的:incremental:true, noEmit: true, strict:false, skipLibCheck:true

于 2019-12-12T18:53:08.347 回答