# @adonisjs/require-ts 中文文档

规范地址：https://npmcn.com/package/%40adonisjs/require-ts/

版本：2\.0\.13
npm 元数据更新时间：2023-05-08T04:48:35.227Z
中文译文更新时间：2026-11-05T19:10:46.195Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40adonisjs/require-ts
原文对照：https://npmcn.com/package/%40adonisjs/require-ts/?lang=original
项目主页：https://github.com/adonisjs/require-ts#readme
源码仓库：https://github.com/adonisjs/require-ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：46 kB，19 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：8 个
- 首次发布：2020-08-30T18:00:33.562Z
- 最新版本发布：2022-09-21T09:49:24.455Z
- 近 30 天下载量：42703（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：21（近 12 个月 0 个）

## 中文简介

在内存打字符编译器中

## 安装

```sh
npm install @adonisjs/require-ts
```

也可以使用：`pnpm add @adonisjs/require-ts`、`yarn add @adonisjs/require-ts`、`bun add @adonisjs/require-ts`

## README

![](https://res.cloudinary.com/adonisjs/image/upload/q_100/v1558612869/adonis-readme_zscycu.jpg)

  

* * *

# 脚本编译器

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

  

[![gh-workflow-image](https://img.shields.io/github/workflow/status/adonisjs/require-ts/test?style=for-the-badge)](https://github.com/adonisjs/require-ts/actions/workflows/test.yml "Github action") [![npm-image](https://img.shields.io/npm/v/@adonisjs/require-ts.svg?style=for-the-badge&logo=npm)](https://npmjs.org/package/@adonisjs/require-ts "npm") ![](https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge&logo=typescript) [![license-image](https://img.shields.io/npm/l/@adonisjs/require-ts?color=blueviolet&style=for-the-badge)](https://npmcn.com/package/%40adonisjs/require-ts/LICENSE.md "license") [![synk-image](https://img.shields.io/snyk/vulnerabilities/github/adonisjs/require-ts?label=Synk%20Vulnerabilities&style=for-the-badge)](https://snyk.io/test/github/adonisjs/require-ts?targetFile=package.json "synk")

## 导言

需要 ts 是一个类似于 [ts-节点](https://github.com/TypeStrong/ts-node) 与少数差异.

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

以防万一,如果你不知道,Node.js拥有注册习惯的一等支持 [需要扩展](https://gist.github.com/jamestalmage/df922691475cff66c7e6) 用于解决和编译带有一定扩展名的文件。 例如:

```ts
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之外使用它,那么就遵循以下设置过程.

```sh
npm i -D @adonisjs/require-ts
```

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

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

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

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

然后运行如下:

```sh
tsnode app.ts
```

## 程序用途

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

### `register`

```ts
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`:带有变压器的物体,在不同生命周期被执行. 读取 [变压器](https://npmcn.com/package/%40adonisjs/require-ts/#readme-transformers) 节.

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

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

### `getWatcherHelpers`

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

```ts
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')`
    
-   检查配置文件是否以会影响编译输出的方式更改 。 如果是,则清除所有缓存文件.
    
    ```ts
    if (helpers.isConfigStale()) {
      helpers.clear() // clear all files from cache
    }
    ```
    

## 缓存

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

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

-   创建一个 `md5 hash` 使用 [重击](https://www.npmjs.com/package/rev-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 (英语)](https://github.com/adonisjs/repl) (原始内容存档于2019-09-26). for the RePL support.

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

## 变形器

Typescript 编译器 API 支持变压器在编译阶段进行AST的变换/调制. [给](https://github.com/madou/typescript-transformer-handbook#writing-your-first-transformer) 你可以了解变压器的一般情况.

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

以下是 tsconfig.json 文件的例子

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

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

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

## 常见问题

### @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 和提交记录判断。

