# tmp 中文文档

规范地址：https://npmcn.com/package/tmp/

版本：0\.2\.7
npm 元数据更新时间：2026-05-27T15:47:18.133Z
中文译文更新时间：2026-11-05T15:30:52.283Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/tmp
原文对照：https://npmcn.com/package/tmp/?lang=original
项目主页：http://github.com/raszi/node-tmp
源码仓库：https://github.com/raszi/node-tmp

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

- 包体积（解压后）：40.2 kB，4 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=14\.14
- 运行依赖：0 个
- 首次发布：2011-09-02T12:30:13.534Z
- 最新版本发布：2026-05-27T15:47:18.009Z
- 近 30 天下载量：333828033（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：40（近 12 个月 2 个）

## 中文简介

临时文件和目录创建者

## 安装

```sh
npm install tmp
```

也可以使用：`pnpm add tmp`、`yarn add tmp`、`bun add tmp`

## README

# 调制

一个简单的临时文件和目录创建者 [节点.js.](http://nodejs.org/)

[![Build Status](https://img.shields.io/github/actions/workflow/status/raszi/node-tmp/node.js.yml?branch=master)](https://github.com/raszi/node-tmp/actions/workflows/node.js.yml) [![Dependencies](https://img.shields.io/librariesio/github/raszi/node-tmp)](https://libraries.io/github/raszi/node-tmp) [![npm version](https://badge.fury.io/js/tmp.svg)](https://badge.fury.io/js/tmp) [![API documented](https://img.shields.io/badge/API-documented-brightgreen.svg)](https://raszi.github.io/node-tmp/) [![Known Vulnerabilities](https://snyk.io/test/npm/tmp/badge.svg)](https://snyk.io/test/npm/tmp)

## 关于

这是一个 [广泛使用的库](https://www.npmjs.com/browse/depended/tmp) 创建临时文件和目录 在一个 [节点.js](http://nodejs.org/) 环境.

Tmp同时提供同步和同步的API. 所有API的电话,所有 参数是可选的。 也存在混合版本的 API,见 [tmp 保证](https://github.com/benjamingr/tmp-promise)。 。 。 .

Tmp使用加密来确定随机文件名,或者,当使用模板时, 6个字母随机标识符。 以防你没有那么多钱 在你的系统上留下的 en,Tmp会倒回伪随机数.

您可以设定是否要删除进程退出时的临时文件 没有.

如果您不想将您的临时目录和文件存储在 标准 OS 临时目录,那么您也可以随意覆盖它.

## 关于以前无记录中断更改的重要说明

所有被引入的突破性变化,即:.

-   tmpdir必须位于所定义的tmpdir 根下.
-   空间被倒塌为单一空间
-   删除所有单一和双引号字符

v. 2.2中恢复了原样,tmp现在应该像以前那样行事 引入这些断裂变化.

其他断裂变化,即:.

-   模板必须相对 tmpdir
-   名称必须相对于 tmpdir
-   dir 选项必须相对 tmpdir

目前仍在执行.

为了覆盖系统的tmpdir,您必须使用新 引入 tmpdir 选项 .

## 关于兼容性的重要说明

见 [变化](https://npmcn.com/package/tmp/CHANGELOG.md) 更多信息.

### 版本0.2.3

-   节点版QQ 14.4已放弃.
-   边缘已经从属地掉下来了

### 版本0.2.2

自0.2.2版本起,已放弃了对QQ14节点版本的所有支持.

### 版本为0.1.0

自0.1.0版本起,对节点版本 < 0.1.0.0的所有支持被放弃.

最重要的是,对于更早版本的节点-tmp的任何支持也被放弃.

如果您还需要 < 0. 0.0 的节点版本, 那么您必须限制您的节点- tmp 依赖0.1.0以下版本.

### 第0.0.33号版本

自0.0.33版本起,对节点版本 < 0.8的所有支持被放弃.

如果您还需要节点版本 0.8, 那你必须限制您的节点 - tmp 依赖0.0.33版本.

对于节点版本 < 0.8, 您必须限制您的节点- tmp依赖性 版本 < 0.0.33.

## 如何安装

```bash
npm install tmp
```

## 使用量

请检查 [API 文件](https://raszi.github.io/node-tmp/)。 。 。 .

## 优雅的清理

如果设置了优雅的清理,tmp将在进程退出时去除所有被控制的临时对象,否则临时对象将留在原地,等待系统重启或其他安排的临时对象去除时被清理.

为了执行,你可以打电话 `setGracefulCleanup()` 方法 :

```javascript
const tmp = require('tmp');

tmp.setGracefulCleanup();
```

### 同步文件创建

简单的临时文件创建,文件将在进程退出时被关闭并解链接.

```javascript
const tmp = require('tmp');

tmp.file(function _tempFileCreated(err, path, fd, cleanupCallback) {
  if (err) throw err;

  console.log('File: ', path);
  console.log('Filedescriptor: ', fd);
  
  // If we don't need the file anymore we could manually call the cleanupCallback
  // But that is not necessary if we didn't pass the keep option because the library
  // will clean after itself.
  cleanupCallback();
});
```

### 同步文件创建

以上同步版本.

```javascript
const tmp = require('tmp');

const tmpobj = tmp.fileSync();
console.log('File: ', tmpobj.name);
console.log('Filedescriptor: ', tmpobj.fd);
  
// If we don't need the file anymore we could manually call the removeCallback
// But that is not necessary if we didn't pass the keep option because the library
// will clean after itself.
tmpobj.removeCallback();
```

请注意,如果有两种情况之一,这可能会造成例外: 创建临时名称失败,或者在您没有权限的情况下 以写入该临时文件应当创建的目录.

### 同步目录创建

简单的临时目录创建,将在进程退出时被删除.

如果目录仍然包含进程退出上的项目,则不会被删除.

```javascript
const tmp = require('tmp');

tmp.dir(function _tempDirCreated(err, path, cleanupCallback) {
  if (err) throw err;

  console.log('Dir: ', path);
  
  // Manual cleanup
  cleanupCallback();
});
```

如果你想清理目录,即使里面有条目,那么 你可以通过 `unsafeCleanup` 选项.

### 同步目录创建

以上同步版本.

```javascript
const tmp = require('tmp');

const tmpobj = tmp.dirSync();
console.log('Dir: ', tmpobj.name);
// Manual cleanup
tmpobj.removeCallback();
```

请注意,如果有两种情况之一,这可能会造成例外: 创建临时名称失败,或者在您没有权限的情况下 以写入该临时目录应创建的目录.

### 同步文件名生成

在此库中可以生成一个指定文件名 目录.

```javascript
const tmp = require('tmp');

tmp.tmpName(function _tempNameGenerated(err, path) {
    if (err) throw err;

    console.log('Created temporary filename: ', path);
});
```

### 同步文件名生成

以上同步版本.

```javascript
const tmp = require('tmp');

const name = tmp.tmpNameSync();
console.log('Created temporary filename: ', name);
```

## 高级用途

### 同步文件创建

用模式创建文件 `0644`,前缀将是 `prefix-` 后补 `.txt`。 。 。 .

```javascript
const tmp = require('tmp');

tmp.file({ mode: 0o644, prefix: 'prefix-', postfix: '.txt' }, function _tempFileCreated(err, path, fd) {
  if (err) throw err;

  console.log('File: ', path);
  console.log('Filedescriptor: ', fd);
});
```

### 同步文件创建

以上同步版本.

```javascript
const tmp = require('tmp');

const tmpobj = tmp.fileSync({ mode: 0o644, prefix: 'prefix-', postfix: '.txt' });
console.log('File: ', tmpobj.name);
console.log('Filedescriptor: ', tmpobj.fd);
```

### 控制描述符

作为创建唯一文件的副作用 `tmp` 获得文件描述符,即 返回用户 `fd` 参数。 描述词可以用于: 应用程序,并在 `removeCallback` 被援引.

在某些情况下,应用程序不需要描述符,需要关闭 不删除文件,或需要删除文件而不关闭文件 释相. 两种选项控制描述符的管理方式:

-   `discardDescriptor` - 狦 `true` 原因 `tmp` 在文件后关闭描述符 创建。 在这种情况下 `fd` 参数未定义.
-   `detachDescriptor` - 狦 `true` 原因 `tmp` 返回 `fd` 参数,但当它不是时,关闭是应用程序的责任 需要更长的时间.

```javascript
const tmp = require('tmp');

tmp.file({ discardDescriptor: true }, function _tempFileCreated(err, path, fd, cleanupCallback) {
  if (err) throw err;
  // fd will be undefined, allowing application to use fs.createReadStream(path)
  // without holding an unused descriptor open.
});
```

```javascript
const tmp = require('tmp');

tmp.file({ detachDescriptor: true }, function _tempFileCreated(err, path, fd, cleanupCallback) {
  if (err) throw err;

  cleanupCallback();
  // Application can store data through fd here; the space used will automatically
  // be reclaimed by the operating system when the descriptor is closed or program
  // terminates.
});
```

### 同步目录创建

创建带有模式的目录 `0755`,前缀将是 `myTmpDir_`。 。 。 .

```javascript
const tmp = require('tmp');

tmp.dir({ mode: 0o750, prefix: 'myTmpDir_' }, function _tempDirCreated(err, path) {
  if (err) throw err;

  console.log('Dir: ', path);
});
```

### 同步目录创建

再说一遍,上面的同步版本.

```javascript
const tmp = require('tmp');

const tmpobj = tmp.dirSync({ mode: 0750, prefix: 'myTmpDir_' });
console.log('Dir: ', tmpobj.name);
```

### mkstemp 像,同步

用模式创建新的临时目录 `0700` 文件名类似 `/tmp/tmp-nk2J1u`。 。 。 .

重要说明:模板不再接受路径. 如果您使用目录选项, 请使用 要求 tmp 将您的临时文件系统对象创建到不同于 默认 `tmp.tmpdir`。 。 。 .

```javascript
const tmp = require('tmp');

tmp.dir({ template: 'tmp-XXXXXX' }, function _tempDirCreated(err, path) {
  if (err) throw err;

  console.log('Dir: ', path);
});
```

### mkstemp 像,同步

这将与同步版本相似 .

```javascript
const tmp = require('tmp');

const tmpobj = tmp.dirSync({ template: 'tmp-XXXXXX' });
console.log('Dir: ', tmpobj.name);
```

### 同步文件名生成

使用 `tmpName()` 您可以同步创建临时文件名称. 该函数接受所有标准选项,例如. `prefix`, (中文(简体) ), `postfix`, (中文(简体) ), `dir`,等等。 (笑声).

也可以将选项全部删除,并仅以回调为第一个参数调用函数.

```javascript
const tmp = require('tmp');

const options = {};

tmp.tmpName(options, function _tempNameGenerated(err, path) {
    if (err) throw err;

    console.log('Created temporary filename: ', path);
});
```

### 同步文件名生成

这个 `tmpNameSync()` 函数工作类似 `tmpName()`。 。 。 . 同样,您可以完全不使用选项,并且只需在没有任何参数的情况下引用函数.

```javascript
const tmp = require('tmp');
const options = {};
const tmpname = tmp.tmpNameSync(options);
console.log('Created temporary filename: ', tmpname);
```

## 选项

所有选项都是可选的 :)

-   `name`:一个固定的名称,它可以覆盖随机名称生成,名称必须是相对的,并且不能包含路径段
-   `mode`: 要创建的文件模式, 回落到 `0o600` 文件创建和 `0o700` 关于目录创建的
-   `prefix`: 可选前缀,默认为 `tmp`
-   `postfix`: 可选后缀
-   `template`数字 : [`mkstemp`](http://www.kernel.org/doc/man-pages/online/pages/man3/mkstemp.3.html) 如文件名模板, 不默认, 必须包含 `XXXXXX` 用于随机名称生成的一次,例如. (原始内容存档于2018-09-30). 'foo-bar-'.
-   `dir`:必须相对于系统默认临时目录的可选临时目录. 绝对路径只要指向系统默认临时目录下的一个位置即可. 沿着这样指定的路径的任何目录必须存在,否则在访问时会出现ENOENT出错, 由于 tmp 将不会检查路径的可用性,也不会为您建立所请求的路径.
-   `tmpdir`: 允许您覆盖系统的根 tmp 目录
-   `tries`: 函数在放弃、 默认之前要尝试获得一个唯一文件名的次数 `3`
-   `keep`: 退出时不应删除临时文件或目录的信号, 默认为 `false`
    -   为了清理干净,你必须拨打提供 `cleanupCallback` 函数.
-   `unsafeCleanup`:递归地去除所创建的临时目录,即使它不是空的. 默认为 `false`
-   `detachDescriptor`: 解析文件描述器, 调用者负责关闭文件, tmp 将不再尝试在垃圾收集过程中关闭文件
-   `discardDescriptor`: 丢弃文件描述符( 关闭文件, fd 为 - 1) , tmp 在垃圾收集过程中将不再尝试关闭文件

## 常见问题

### tmp 是什么？

临时文件和目录创建者

### 如何安装 tmp？

在项目目录运行 npm install tmp，或使用 pnpm add / yarn add / bun add。

### tmp 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/tmp 是否存在。

### tmp 支持 ESM 还是 CommonJS？

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

### tmp 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=14\.14。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### tmp 可以商用吗？

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

### tmp 的下载量有多少？

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

### tmp 还在维护吗？

最新版本 0\.2\.7 发布于 2026/05/27（5 个月前）；至今共发布 40 个版本，其中过去 12 个月发布了 2 个；首次发布于 2011/09/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

