@adonisjs/require-ts

中文文档
2.0.13发布于 2022/09/21MITTypeScriptCommonJS近 30 天下载 4.3万

在内存打字符编译器中

中文使用文档
文档目录9 节
  1. 导言
  2. 目标
  3. 使用量
  4. 程序用途
  5. register
  6. getWatcherHelpers
  7. 缓存
  8. 与 ts- 节点的差异
  9. 变形器


脚本编译器

用于节点.js的内存 Typescript 编译器,支持 缓存 财务报告和审定财务报表 自定义变压器


gh-workflow-image npm-image license-image synk-image

导言

需要 ts 是一个类似于 ts-节点 与少数差异.

想法是钩入Node.js的生命周期 require 在苍蝇上调用和编译 Typescription(在内存中)

以防万一,如果你不知道,Node.js拥有注册习惯的一等支持 需要扩展 用于解决和编译带有一定扩展名的文件。 例如:

require.extenstions['.ts'] = function (module, filename) {
  var content = fs.readFileSync(filename, 'utf8')
  module._compile(content, filename)
}

如果我们用 Typescript 编译器 API 来取代示例的函数正文,那么我们基本上可以得到入模的打字编译. 然而,还有许多其他事情需要处理.

  • 使源图工作,这样错误会指向Typescript 代码,而不是内存 Javascript中编译的.
  • 支持打字扩展
  • 引入某种缓存来避免重编未修改的文件. Typescript 编译器不是最快的编译器之一,因此需要缓存.

目标

编写此模块的目标如下:

  • 可以在不设置磁盘编译器的情况下使用 Typescript工作
  • 保持入室编译速度快. 为此,我们不进行类型检查。 您的IDE 或文本编辑器应该这样做 .
  • 缓存磁盘上的已编译输出, 以避免重编未修改的文件 。 一个体面的项目有100多份源文件 我们通常不会一起改变所有的文件 所编译的缓存也与所编译的输出不同.
  • 用于监视者清除缓存的曝光助手功能 。 大多数Node.js应用程序使用某种监视器来监视文件的更改,然后重新启动进程. 此软件包所暴露的帮助者,允许监视者清理已更改文件的缓存.
  • 添加自定义变压器支持 .

使用量

这个模块预先配置了所有AdonisJS应用程序,理想的是你不需要自己去挖掘设置过程. 但是,如果你在AdonisJS之外使用它,那么就遵循以下设置过程.

npm i -D @adonisjs/require-ts

然后要求它作为节点 Js需要钩子

node -r @adonisjs/require-ts/build/register app.ts

我亲自为上面的指挥官 设计出一个狂欢的化名.

alias tsnode="node -r @adonisjs/require-ts/build/register"

然后运行如下:

tsnode app.ts

程序用途

这个软件包的主要目标是揭露一个程序API,其他人可以用来创建自己的构建工具或命令.

register

const { register } = require('@adonisjs/require-ts')

/**
 * Require ts will resolve the "tsconfig.json" file from this
 * path. tsconfig.json file is required to compile the code as * per the project requirements
 */
const appRoot = __dirname

const options = {
  cache: true,
  cachePath: join(require.resolve('node_modules'), '.cache/your-app-name'),
  transformers: {
    before: [],
    after: [],
    afterDeclarations: [],
  },
}

register(appRoot, options)

/**
 * From here on you can import the typescript code
 */
require('./typescript-app-entrypoint.ts')

这个 register 方法接受用于配置缓存和执行变压器的可选对象.

  • cache: 是否配置缓存
  • cachePath: 将缓存输出写入何处
  • transformers:带有变压器的物体,在不同生命周期被执行. 读取 变压器 节.

该寄存器方法为Node.js全局命名空间增加了两个全局属性.

  • compiler: 引用编译器,即正在编译源代码. 您可以通过以下方式访问:
    const { symbols } = require('@adonisjs/require-ts')
    console.log(global[symbols.compiler])
    
  • config: 引用配置解析器 tsconfig.json 文档。 您可以通过以下方式访问:
    const { symbols } = require('@adonisjs/require-ts')
    console.log(global[symbols.config])
    

getWatcherHelpers

观察者帮助者允许观察者在不同的事件中清理缓存. 这是你如何使用它

const { getWatcherHelpers } = require('@adonisjs/require-ts')

/**
 * Require ts will resolve the "tsconfig.json" file from this
 * path. tsconfig.json file is required to compile the code as * per the project requirements
 */
const appRoot = __dirname

/**
 * Same as what you passed to the `register` method
 */
const cachePath = join(require.resolve('node_modules'), '.cache/your-app-name')

const helpers = getWatcherHelpers(appRoot, cachePath)

helpers.clear('./relative/path/from/app/root')

这就是你应该如何设置流量

  • 第一次启动监视器时清理整个缓存. helpers.clear()。没有争论的意思,清除一切

  • 为刚刚更改的文件清理缓存 . helpers.clear('./file/path')

  • 检查配置文件是否以会影响编译输出的方式更改 。 如果是,则清除所有缓存文件.

    if (helpers.isConfigStale()) {
      helpers.clear() // clear all files from cache
    }
    

缓存

缓存对我们很重要 从磁盘上读取所编译的输出比用Typescript重新将同一份文件相编译快得多.

这就是我们如何执行缓冲.

  • 创建一个 md5 hash 使用 重击 软件包.
  • 检查缓存输出与散列名称相同 .
  • 如果文件存在, 则将其输出传递给 Node.js module._compile 方法.
  • 否则,使用 Typescript 编译器 API 编译文件并在磁盘上缓存

模块本身并不费心去清理被堆积的缓存文件. 意思是,缓存会长得像草.

然而,我们暴露出帮助者功能来清理缓存. 通常,你会使用它们 与文件监视器喜欢 nodemon 以清除已更改文件的缓存.

与 ts- 节点的差异

ts-node 财务报告和审定财务报表 require-ts 有一些但重要的区别.

  • ts-node 也输入检查 Typescript 代码。 它们允许不进行类型检查而配置 ts-node 。 但总的来说,他们支付额外的设置成本 仅仅通过考虑类型检查.
  • ts-node 没有在磁盘上卡通的概念。 这对我们来说是一个交易中断器. 那么为什么不把这个功能贡献给ts-node呢?我们可以的 但是为了使缓存正常工作,模块需要让守望者暴露出帮助者来清理缓存,而我不认为Ts-node会对此烦恼.
  • ts-node 装有内置还原装置的船只。 我们不想自找麻烦 同样地,将代码库的焦点放在一个单一的使用案例上. 你用得着 @ adonisjs/ repl (英语) (原始内容存档于2019-09-26). for the RePL support.

这些差异很小,但总体影响最大.

变形器

Typescript 编译器 API 支持变压器在编译阶段进行AST的变换/调制. 给 你可以了解变压器的一般情况.

与 require-ts,可以将变压器在 tsconfig.json 在使用程序 API 时,将文件或通过内线.

以下是 tsconfig.json 文件的例子

{
  "compilerOptions": {},
  "transformers": {
    "before": ["./transformer-before"],
    "after": ["./transformer-after"],
    "afterDeclarations": ["./transformer-after-declarations"]
  }
}

变压器阵列接受来自 appRoot。变压器模块必须导出以下函数:

export default transformerBefore(ts: typescript, appRoot: string) {
  return function transformerFactory (context) {}
}

版本与发布记录

@adonisjs/require-ts 共发布 21 个版本,首次发布于 2020/08/31;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.13latest2022/09/214 年前
2.0.122022/05/224 年前
2.0.112022/04/044 年前
2.0.102022/02/224 年前
2.0.92022/01/174 年前
2.0.82021/08/295 年前

关于 @adonisjs/require-ts 的常见问题

@adonisjs/require-ts 是什么?

在内存打字符编译器中

如何安装 @adonisjs/require-ts?

在项目目录运行 npm install @adonisjs/require-ts,或使用 pnpm add / yarn add / bun add。

@adonisjs/require-ts 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@adonisjs/require-ts 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@adonisjs/require-ts 可以商用吗?

@adonisjs/require-ts 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@adonisjs/require-ts 的下载量有多少?

根据 npm 官方下载统计,@adonisjs/require-ts 在 2026/10/05 – 2026/11/03 这 30 天内被下载 42,703 次,日均约 1,423 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@adonisjs/require-ts 还在维护吗?

最新版本 2.0.13 发布于 2022/09/21(4 年前);至今共发布 21 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/08/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。