jszip vs archiver vs adm-zip vs node-zip vs zip-a-folder vs zip-local
壓縮與解壓縮
jsziparchiveradm-zipnode-zipzip-a-folderzip-local類似套件:

壓縮與解壓縮

這些庫提供了在 Node.js 環境中創建和操作 ZIP 檔案的功能。它們允許開發者壓縮檔案和資料夾以節省空間或便於傳輸,並解壓縮 ZIP 檔案以訪問其內容。這些庫各有特點,適用於不同的使用場景,例如簡單的檔案壓縮、處理大型資料夾或需要高效解壓縮的應用。

npm下載趨勢

3 年

GitHub Stars 排名

統計詳情

套件
下載數
Stars
大小
Issues
發布時間
許可
jszip69,917,48110,394693 kB3912 個月前(MIT OR GPL-3.0-or-later)
archiver66,563,0072,97939.6 kB1756 個月前MIT
adm-zip31,674,7022,186151 kB612 個月前MIT
node-zip130,490217-1912 年前-
zip-a-folder68,81178262 kB013 天前MIT
zip-local35,20212257.1 kB13--

功能比較: jszip vs archiver vs adm-zip vs node-zip vs zip-a-folder vs zip-local

壓縮性能

  • jszip:

    jszip 的壓縮性能適中,適合處理中小型檔案。它支援多種壓縮演算法,但不支援流式壓縮,可能會在處理大型檔案時遇到記憶體限制。

  • archiver:

    archiver 提供高效的壓縮性能,特別是在處理大型檔案和資料夾時。它支援流式壓縮,能夠減少記憶體使用,並提高處理速度。

  • adm-zip:

    adm-zip 提供基本的壓縮性能,適合小型檔案和資料夾。對於大型檔案,壓縮效率較低,因為它不支援流式壓縮。

  • node-zip:

    node-zip 專注於解壓縮,對壓縮性能沒有特別優化。適合需要快速解壓縮檔案的場景,但不適合用於壓縮大型檔案。

  • zip-a-folder:

    zip-a-folder 提供基本的資料夾壓縮功能,適合快速壓縮整個資料夾。對於大型資料夾,壓縮效率和速度會受到限制。

  • zip-local:

    zip-local 提供輕量級的壓縮性能,適合小型檔案和資料夾。對於大型檔案,壓縮效率一般,適合不需要高效能的場景。

API 易用性

  • jszip:

    jszip 提供簡單易用的 API,特別是在創建和讀取 ZIP 檔案方面。其跨平台特性使其在瀏覽器和 Node.js 中都很方便使用。

  • archiver:

    archiver 的 API 設計適合流式操作,但對於新手來說,可能需要一些時間來熟悉其用法。文檔詳細,提供了豐富的範例。

  • adm-zip:

    adm-zip 提供直觀且易於使用的 API,特別是在壓縮和解壓縮檔案方面。其文檔清晰,適合快速上手。

  • node-zip:

    node-zip 提供簡單的解壓縮 API,適合快速解壓縮檔案。其文檔簡潔,易於理解。

  • zip-a-folder:

    zip-a-folder 提供直觀的資料夾壓縮 API,易於使用。特別適合需要快速壓縮資料夾的開發者。

  • zip-local:

    zip-local 的 API 簡單明瞭,適合快速壓縮和解壓縮檔案。文檔清晰,易於理解。

流式處理

  • jszip:

    jszip 不支援流式壓縮,所有檔案在處理過程中都會載入記憶體。這對於大型檔案可能會造成記憶體限制。

  • archiver:

    archiver 支援流式壓縮,允許逐步處理檔案,這樣可以大幅降低記憶體使用,特別是在處理大型檔案和資料夾時。

  • adm-zip:

    adm-zip 不支援流式處理,所有檔案在壓縮和解壓縮過程中都會一次性載入記憶體,這對於大型檔案可能會造成記憶體使用過高。

  • node-zip:

    node-zip 專注於解壓縮,不支援流式處理。所有檔案都會一次性載入記憶體。

  • zip-a-folder:

    zip-a-folder 不支援流式處理,整個資料夾在壓縮過程中會一次性載入記憶體。

  • zip-local:

    zip-local 不支援流式處理,所有檔案在壓縮和解壓縮過程中都會一次性載入記憶體。

跨平台支援

  • jszip:

    jszip 專注於 ZIP 檔案格式,支援在瀏覽器和 Node.js 環境中創建和操作 ZIP 檔案。

  • archiver:

    archiver 支援多種壓縮格式,包括 ZIP、TAR、GZIP 等,提供更大的靈活性。

  • adm-zip:

    adm-zip 僅支援 ZIP 檔案格式,無法處理其他壓縮格式。

  • node-zip:

    node-zip 僅支援 ZIP 檔案的解壓縮,功能較為單一。

  • zip-a-folder:

    zip-a-folder 僅支援 ZIP 檔案格式,專注於資料夾壓縮。

  • zip-local:

    zip-local 支援 ZIP 檔案的壓縮和解壓縮,功能簡單。

範例程式碼

  • jszip:

    jszip 壓縮與解壓縮篫例

    const JSZip = require('jszip');
    const fs = require('fs');
    
    const zip = new JSZip();
    zip.file('example.txt', 'Hello, World!');
    
    // 壓縮檔案
    zip.generateAsync({ type: 'nodebuffer' }).then((content) => {
      fs.writeFileSync('example.zip', content);
    });
    
    // 解壓縮檔案
    fs.readFile('example.zip', (err, data) => {
      zip.loadAsync(data).then((zip) => {
        zip.file('example.txt').async('string').then((content) => {
          console.log(content);
        });
      });
    });
    
  • archiver:

    archiver 壓縮範例

    const fs = require('fs');
    const archiver = require('archiver');
    
    const output = fs.createWriteStream('example.zip');
    const archive = archiver('zip');
    
    output.on('close', () => {
      console.log(`檔案已壓縮,總大小: ${archive.pointer()} bytes`);
    });
    
    archive.pipe(output);
    archive.directory('資料夾名稱/', false);
    archive.finalize();
    
  • adm-zip:

    adm-zip 壓縮與解壓縮範例

    const AdmZip = require('adm-zip');
    
    // 壓縮檔案
    const zip = new AdmZip();
    zip.addFile('example.txt', Buffer.from('Hello, World!'));
    zip.writeZip('example.zip');
    
    // 解壓縮檔案
    const zipFile = new AdmZip('example.zip');
    zipFile.extractAllTo('output', true);
    
  • node-zip:

    node-zip 解壓縮範例

    const fs = require('fs');
    const unzip = require('node-zip');
    
    const data = fs.readFileSync('example.zip');
    const zip = unzip(data);
    const file = zip.files['example.txt'];
    const content = file.data.toString('utf8');
    console.log(content);
    
  • zip-a-folder:

    zip-a-folder 資料夾壓縮範例

    const zipFolder = require('zip-a-folder');
    
    zipFolder('資料夾名稱', 'example.zip').then(() => {
      console.log('資料夾已成功壓縮!');
    });
    
  • zip-local:

    zip-local 壓縮與解壓縮範例

    const zipLocal = require('zip-local');
    const fs = require('fs');
    
    // 壓縮檔案
    zipLocal.zip('example.txt').then((zip) => {
      fs.writeFileSync('example.zip', zip);
    });
    
    // 解壓縮檔案
    zipLocal.unzip('example.zip').then((data) => {
      console.log(data);
    });
    

如何選擇: jszip vs archiver vs adm-zip vs node-zip vs zip-a-folder vs zip-local

  • jszip:

    選擇 jszip 如果您需要在瀏覽器和 Node.js 環境中都能操作 ZIP 檔案。它支援創建、讀取和修改 ZIP 檔案,適合需要跨平台的應用。

  • archiver:

    選擇 archiver 如果您需要高效地壓縮大型檔案或資料夾,並且需要支援多種壓縮格式。它提供了流式壓縮功能,適合處理大量資料。

  • adm-zip:

    選擇 adm-zip 如果您需要一個簡單易用的庫來快速壓縮和解壓縮檔案。它提供了直觀的 API,適合小型專案和快速開發。

  • node-zip:

    選擇 node-zip 如果您需要一個輕量級的解壓縮庫。它專注於解壓縮 ZIP 檔案,適合只需要解壓縮功能的專案。

  • zip-a-folder:

    選擇 zip-a-folder 如果您需要一個簡單的工具來壓縮整個資料夾。它的 API 直觀,適合快速壓縮資料夾而不需要複雜的設定。

  • zip-local:

    選擇 zip-local 如果您需要一個輕量級的庫來壓縮和解壓縮檔案和資料夾。它支援本地檔案操作,適合小型專案和簡單的檔案處理。

jszip 的 README

JSZip

A library for creating, reading and editing .zip files with JavaScript, with a lovely and simple API.

See https://stuk.github.io/jszip for all the documentation.

const zip = new JSZip();

zip.file("Hello.txt", "Hello World\n");

const img = zip.folder("images");
img.file("smile.gif", imgData, {base64: true});

zip.generateAsync({type:"blob"}).then(function(content) {
    // see FileSaver.js
    saveAs(content, "example.zip");
});

/*
Results in a zip containing
Hello.txt
images/
    smile.gif
*/

License

JSZip is dual-licensed. You may use it under the MIT license or the GPLv3 license. See LICENSE.markdown.