tmp

中文文档
0.2.7发布于 2026/05/27MITCommonJS零依赖近 30 天下载 3.3亿

临时文件和目录创建者

中文使用文档
文档目录27 节
  1. 关于
  2. 关于以前无记录中断更改的重要说明
  3. 关于兼容性的重要说明
  4. 版本0.2.3
  5. 版本0.2.2
  6. 版本为0.1.0
  7. 第0.0.33号版本
  8. 如何安装
  9. 使用量
  10. 优雅的清理
  11. 同步文件创建
  12. 同步文件创建
  13. 同步目录创建
  14. 同步目录创建
  15. 同步文件名生成
  16. 同步文件名生成
  17. 高级用途
  18. 同步文件创建
  19. 同步文件创建
  20. 控制描述符
  21. 同步目录创建
  22. 同步目录创建
  23. mkstemp 像,同步
  24. mkstemp 像,同步
  25. 同步文件名生成
  26. 同步文件名生成
  27. 选项

调制

一个简单的临时文件和目录创建者 节点.js.

Build Status Dependencies npm version API documented Known Vulnerabilities

关于

这是一个 广泛使用的库 创建临时文件和目录 在一个 节点.js 环境.

Tmp同时提供同步和同步的API. 所有API的电话,所有 参数是可选的。 也存在混合版本的 API,见 tmp 保证。 。 。 .

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

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

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

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

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

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

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

其他断裂变化,即:.

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

目前仍在执行.

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

关于兼容性的重要说明

见 变化 更多信息.

版本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.

如何安装

npm install tmp

使用量

请检查 API 文件。 。 。 .

优雅的清理

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

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

const tmp = require('tmp');

tmp.setGracefulCleanup();

同步文件创建

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

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();
});

同步文件创建

以上同步版本.

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();

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

同步目录创建

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

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

const tmp = require('tmp');

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

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

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

同步目录创建

以上同步版本.

const tmp = require('tmp');

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

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

同步文件名生成

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

const tmp = require('tmp');

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

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

同步文件名生成

以上同步版本.

const tmp = require('tmp');

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

高级用途

同步文件创建

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

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);
});

同步文件创建

以上同步版本.

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 参数,但当它不是时,关闭是应用程序的责任 需要更长的时间.
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.
});
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_。 。 。 .

const tmp = require('tmp');

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

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

同步目录创建

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

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。 。 。 .

const tmp = require('tmp');

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

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

mkstemp 像,同步

这将与同步版本相似 .

const tmp = require('tmp');

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

同步文件名生成

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

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

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()。 。 。 . 同样,您可以完全不使用选项,并且只需在没有任何参数的情况下引用函数.

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 如文件名模板, 不默认, 必须包含 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 共发布 40 个版本,首次发布于 2011/09/02;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.2.7latest2026/05/275 个月前
0.2.62026/05/275 个月前
0.2.52025/08/091.2 年前
0.2.42025/08/061.2 年前
0.2.32024/02/292 年前
0.2.22024/02/282 年前

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