【问题标题】:Is there any option to compile and run a ts code faster using tsc or ts-node or anything else?是否有任何选项可以使用 tsc 或 ts-node 或其他任何东西更快地编译和运行 ts 代码?
【发布时间】: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,这样可以避免重复安装,可能会帮助你发现问题

标签: typescript performance ts-node online-compilation


【解决方案1】:

选项 A

  1. 尝试在不同的文件中生成 TS 代码,例如:在单独的文件中动态拆分每个函数,或者要求用户“上传”不同的 ts 文件,每个文件的代码更少,也可以动态检查和限制每个函数或文件的行数
  2. 只需转换已更改的文件(这部分可以使用 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 快速编译的方法

  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",
    

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多