在Node.js中使用Zip文件

做者:Valeri Karpov

翻譯:瘋狂的技術宅javascript

原文:http://thecodebarbarian.com/w...html

未經容許嚴禁轉載前端

Zip文件是經常使用的壓縮文件格式。在本文中,我將演示如何用 adm-zip npm模塊建立和提取zip文件。java

建立一個Zip文件

從 adm-zip 的 npm 模塊中導出一個 AdmZip 類。 AdmZip的實例對應於一個zip文件。若是想要建立一個新的 zip 文件,在調用 new AdmZip() 時不該帶任何參數:node

const AdmZip = require('adm-zip');

const file = new AdmZip();

能夠經過多種方式將文件和目錄添加到 file。能夠用 file.addLocalFile()file.addLocalFolder() 經過文件名從文件系統添加文件和目錄。例以下面的代碼演示了怎樣把 package.json 文件和 node_modules 目錄添加到 zip 文件中:git

const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addLocalFile('./package.json');
//第二個node_modules 參數是 zip 中目錄的路徑。
//若是沒有第二個參數,則`./node_modules`中的每一個目錄都將是壓縮文件中的頂級目錄
file.addLocalFolder('./node_modules', 'node_modules');

而後,你可使用下面兩種方法中的一個寫入文件:程序員

//寫入zip文件的第一種方法:將其轉換爲緩衝區並使用`fs`
const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

// 另外一種寫入 zip 文件的方法:writeZip()
file.writeZip('output.zip');

寫入output.zip 文件後,你應該可以在制定的 zip 解壓縮程序中打開它。下面是在 Xubuntu 的默認存檔管理器 engrampa 中打開的文件。github

img

addLocalFile()addLocalFolder() 的第二個參數是將文件或目錄內容放入zip的路徑。例如,若是要將 package.jsonnode_modules 都放在 project 目錄下,則能夠運行如下腳本:面試

const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addLocalFile('./package.json', 'project');
file.addLocalFolder('./node_modules', 'project/node_modules');

const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

能夠用 file.addFile() 方法從原始 Node.js 緩衝區添加文件。如下是不在文件系統上建立文件的狀況下,將包含字符串 Hello,World 的文本文件添加到 zip 文件中的方法。npm

const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addFile('hello.txt', Buffer.fromString('Hello, World'));

const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

使用現有文件

若是你將參數傳遞給 AdmZip 構造函數,則adm-zip將在給定路徑下解析文件。下面是將全部內容從 output.zip 文件提取到目錄 output 的方法。

const AdmZip = require('adm-zip');

const file = new AdmZip('./output.zip');

file.extractAllTo('./output');

也能夠用 file.extractEntryTo() 從 zip 文件中提取單個文件。例如,下面是從 zip 文件中拉出 hello.txt 文件並將其寫入當前目錄的方法:

const AdmZip = require('adm-zip');

const file = new AdmZip('./output.zip');

file.extractEntryTo('hello.txt', './');

你也能夠對現有文件使用 addLocalFile()addLocalFolder()addFile()

總結

zip 文件一般用於壓縮。某些服務(例如AWS Lambda)要求你使用 zip 文件。幸運的是,adm-zip npm 模塊使直接從 Node.js 建立和提取 zip 文件變得容易。

173382ede7319973.gif


本文首發微信公衆號:前端先鋒

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎繼續閱讀本專欄其它高贊文章:


相關文章
相關標籤/搜索