nanotar
适用于任何 JavaScript 运行时的微小快速 Tar 工具!
小巧快速的 tar 工具,适用于任何 JavaScript 运行时!
🌳 小巧(所有工具精简并 Gzip 压缩后约为 1KB)且支持摇树优化!
✨ 采用现代 TypeScript 和 ESM 格式编写
✅ 适用于任何 JavaScript 运行时:Node.js (18+), Bun, Deno, 浏览器和 Edge Workers
🌐 兼容 Web 标准
🗜️ 内置压缩和解压缩支持
安装
安装包
# npm
npm install nanotar
# yarn
yarn add nanotar
# pnpm
pnpm install nanotar
# bun
bun install nanotar
导入
// ESM
import {
createTar,
createTarGzip,
createTarGzipStream,
parseTar,
parseTarGzip,
} from "nanotar";
// CommonJS
const { createTar } = require("nanotar");
创建 tar 归档文件
使用 createTar
工具,轻松创建新的 tar 归档文件。
第一个参数是要归档的文件数组
name
字段是必需的,你可以使用/
来指定子目录中的文件。data
字段对于目录是可选的,可以是 String、ArrayBuffer
或Uint8Array
之一。attrs
字段对于文件属性是可选的。
第二个参数是归档选项。你可以使用 attrs
为所有文件设置默认属性(仍可按文件覆盖)。
可能的属性有
mtime
:最后修改时间。默认为Date.now()
uid
:所有者用户 ID。默认为1000
gid
:所有者组 ID。默认为1000
user
:所有者用户名。默认为""
group
:所有者用户组。默认为""
mode
:文件模式(权限)。文件默认为664
(-rw-rw-r--
),目录默认为775
(-rwxrwxr-x
)
示例
import { createTar } from "nanotar";
const data = createTar(
[
{ name: "README.md", data: "# Hello World!" },
{ name: "test", attrs: { mode: "777", mtime: 0 } },
{ name: "src/index.js", data: "console.log('wow!')" },
],
{ attrs: { user: "js", group: "js" } },
);
// Data is a Uint8Array view you can send or write to a file
压缩
你可以选择使用 createTarGzip
或 createTarGzipStream
来创建压缩的 tar 数据流(返回值是 Promise<Uint8Array>
或通过管道连接到 CompressionStream
的 ReadableStream
)
import { createTarGzip, createTarGzipStream } from "nanotar";
createTarGzip([]); // Promise<Uint8Array>
createTarGzipStream([]); // RedableStream
解析 tar 归档文件
使用 parseTar
工具,轻松解析 tar 归档文件。
示例
import { parseTar } from "nanotar";
// Read tar data from file or other sources into an ArrayBuffer or Uint8Array
const files = parseTar(data);
/**
[
{
"type": "file",
"name": "hello.txt",
"size": 12,
"data": Uint8Array [ ... ],
"text": "Hello World!",
"attrs": {
"gid": 1750,
"group": "",
"mode": "0000664",
"mtime": 1702076997,
"uid": 1750,
"user": "root",
},
},
...
]
*/
解析后的文件数组有两个额外属性:size
文件大小和 text
,这是一个惰性 getter,用于将 data
视图解码为字符串。
解压缩
如果输入是压缩的,你可以改用 parseTarGzip
工具来解析它(它内部使用 DecompressionStream
并返回一个 Promise<Uint8Array>
值)
import { parseTarGzip } from "nanotar";
parseTarGzip(data); // Promise<Uint8Array>
开发
许可
用心制作 💛
灵感来源于 ankitrohatgi/tarballjs
发布于 MIT 许可证下。