67 lines
1.6 KiB
Markdown
67 lines
1.6 KiB
Markdown
# 7-Zip WASM
|
|
|
|
7-Zip compiled to WASM with emscripten. Based on 7-Zip 22.01 (2022-07-15).
|
|
|
|
- Runs in any JavaScript environment that supports WASM (Browser or NodeJS)
|
|
- Supports all file formats that the full `7zz` CLI supports.
|
|
- Only Emscripten NODEFS and WORKERFS adapters are included by default.
|
|
|
|
Inspired by https://github.com/sonictruth/7zip.js
|
|
|
|
## Usage
|
|
|
|
### Command-line
|
|
|
|
```
|
|
npx 7z-wasm --help
|
|
```
|
|
|
|
or
|
|
|
|
```
|
|
npm i -g 7z-wasm
|
|
7z-wasm --help
|
|
```
|
|
|
|
### As a module
|
|
|
|
```ts
|
|
import SevenZip from "7z-wasm";
|
|
|
|
const sevenZip = await SevenZip();
|
|
|
|
const archiveData = new Uint8Array(100);
|
|
const archiveName = "archive.7z";
|
|
|
|
const stream = sevenZip.FS.open(archiveName, "w+");
|
|
sevenZip.FS.write(stream, archiveData, 0, archiveData.length);
|
|
sevenZip.FS.close(stream);
|
|
|
|
const filesToExtract = ["some-file.txt"];
|
|
sevenZip.callMain(["x", archiveName, ...filesToExtract]);
|
|
console.log(sevenZip.FS.readFile(filesToExtract[0]));
|
|
```
|
|
|
|
### Working with the real file system (Node.JS only)
|
|
|
|
```ts
|
|
import SevenZip from "7z-wasm";
|
|
|
|
const mountRoot = "/nodefs";
|
|
sevenZip.FS.mkdir(mountRoot);
|
|
sevenZip.FS.mount(sevenZip.NODEFS, { root: "/real/root/folder" }, mountRoot);
|
|
sevenZip.FS.chdir(mountRoot + "/subfolder");
|
|
|
|
sevenZip.callMain(["x", "archive.7z", "some-file.txt"]);
|
|
```
|
|
|
|
## Building
|
|
|
|
Because the 7-Zip sources are not available on GitHub, the build process relies on downloading the sources from the
|
|
7-Zip website and patching them so they compile with emcc.
|
|
|
|
- Install docker
|
|
- Execute `./build` (or `.\build`, respectively, on Windows CMD)
|
|
|
|
You can pass custom options to emcc via env file (e.g. see [build-umd.env]())
|