ใน nodejs ตัวเก็บถาวรจะใช้ในการบีบอัดและจัดแพ็กเกจไฟล์บางไฟล์ลงในแพ็กเกจที่บีบอัดในรูปแบบ zip หรือรูปแบบ tar โดย archiver เป็นโมดูลที่สามารถใช้ฟังก์ชันการทำแพ็กเกจข้ามแพลตฟอร์มได้ รูปแบบแพ็กเกจคือ zip และ tar คุณสามารถใช้ไฟล์ "npm install archiver" คำสั่ง " ติดตั้งโมดูลนี้ก่อนใช้งาน
สภาพแวดล้อมการทำงานของบทความนี้: ระบบ Windows 10, nodejs เวอร์ชัน 12.19.0, คอมพิวเตอร์ Dell G3
บางครั้งเราจำเป็นต้องบีบอัดและจัดแพ็คเกจไฟล์บางไฟล์เป็นแพ็คเกจบีบอัดในรูปแบบ zip หรือรูปแบบ tar และเราอาจจำเป็นต้องจัดทำแพ็คเกจไดเร็กทอรีด้วย ใน Node.js คุณสามารถใช้ตัวจัดเก็บแพ็คเกจบุคคลที่สามเพื่อดำเนินการได้
Archiver เป็นโมดูลที่สามารถรับฟังก์ชันบรรจุภัณฑ์ข้ามแพลตฟอร์มใน nodejs ได้ โดยสามารถสร้างแพ็คเกจ zip และ tar ได้ เป็นโมดูลของบุคคลที่สามที่ค่อนข้างใช้งานง่าย
ติดตั้งโมดูลเก็บถาวรก่อนใช้งาน
รหัสมีดังนี้:
ตัวเก็บถาวรการติดตั้ง npmการแนะนำ:
// เนื่องจากจำเป็นต้องอ่านไฟล์ จึงจำเป็นต้องมีโมดูล fs และ const fs = need('fs'); const archiver = need('archiver');การใช้งานพื้นฐานมีดังนี้:
// ขั้นตอนแรก นำเข้าโมดูลที่จำเป็น const fs = need('fs'); const archiver = need('archiver'); // ขั้นตอนที่สอง สร้างสตรีมแบบเขียนได้เพื่อเขียนข้อมูล const output = fs.createWriteStream ( __dirname + "/hello.zip");// บันทึกแพ็คเกจที่บีบอัดลงในไดเร็กทอรีของโปรเจ็กต์ปัจจุบัน และแพ็คเกจที่บีบอัดจะมีชื่อว่า test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//ตั้งค่าระดับการบีบอัด//ขั้นตอนที่สามคือการสร้างการเชื่อมต่อไปป์ไลน์ archive.pipe(output);//ขั้นตอนที่สี่คือการบีบอัดไฟล์ที่ระบุ var stream = fs.createReadStream(__dirname + "/hello. txt");// อ่าน hello.txtarchive.append(stream, {name: 'hello.txt'});// ขั้นตอนที่ห้าคือการทำให้ไฟล์บีบอัด archive.finalize();หลังจากดำเนินการโค้ดสำเร็จแล้ว แพ็คเกจบีบอัดชื่อ hello.zip จะถูกสร้างขึ้นในไดเร็กทอรีที่โปรเจ็กต์ตั้งอยู่ แพ็คเกจบีบอัดประกอบด้วยไฟล์บีบอัด hello.txt
ไฟล์บีบอัดสามารถทำงานได้โดยใช้ archive.append() และ archive.file()
API สำหรับการบีบอัดไฟล์เดียวมีดังนี้:
//เพิ่มไฟล์ลงในแพ็คเกจที่บีบอัดและอ่านข้อมูลผ่านสตรีมที่เขียนได้ Const file1 = __dirname + '/file1.txt';archive.append(fs.createReadStream(file1), { name: 'file1.txt ' } );//เพิ่มไฟล์ลงในแพ็คเกจที่บีบอัดและต่อท้ายไฟล์โดยการเขียนสตริงไปที่ไฟล์ archive.append('string Cheese!', { name: 'file2.txt' });//เพิ่มไฟล์ที่จะบีบอัด package ผนวกไฟล์ผ่าน Buffer data const buffer3 = Buffer.from('buff it!');archive.append(buffer3, { name: 'file3.txt' });// เพิ่มไฟล์ลงในแพ็คเกจแพ็คเกจที่บีบอัด, ส่งผ่านเส้นทางไฟล์โดยตรง archive.file('file1.txt', { name: 'file4.txt' });ตัวอย่างที่สมบูรณ์มีดังนี้:
// ขั้นตอนแรก นำเข้าโมดูลที่จำเป็น const fs = need('fs'); const archiver = need('archiver'); // ขั้นตอนที่สอง สร้างสตรีมแบบเขียนได้เพื่อเขียนข้อมูล const output = fs.createWriteStream ( __dirname + "/hello.zip");// บันทึกแพ็คเกจที่บีบอัดลงในไดเร็กทอรีของโปรเจ็กต์ปัจจุบัน และแพ็คเกจที่บีบอัดจะมีชื่อว่า test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//ตั้งค่าระดับการบีบอัด//ขั้นตอนที่สามคือการสร้างการเชื่อมต่อไปป์ไลน์ archive.pipe(output);//ขั้นตอนที่สี่คือการบีบอัดไฟล์ที่ระบุ archive.append(fs.createReadStream(__dirname + '/hello .txt'), { ชื่อ: 'hello.txt'}); // File stream archive.append('index.html', {name: 'index.html'}); // File path archive.append(Buffer .from("นี่คือข้อมูลในรูปแบบบัฟเฟอร์"), {name: 'buffer.txt'});// Buffer object archive.append("ส่งผ่านโดยตรงในสตริง", {name: 'string.txt'}) ;// String/ / ขั้นตอนที่ห้าคือการทำการบีบอัดไฟล์ archive.finalize();หมายเหตุ: พารามิเตอร์ตัวที่สอง {name: 'hello.txt'} ของ archive.append() คือการเปลี่ยนชื่อไฟล์ที่เกี่ยวข้องในแพ็คเกจที่บีบอัด
หากคุณต้องการบีบอัดไฟล์หลายไฟล์ เพียงเรียกใช้เมธอด archive.append() เพื่อต่อท้ายไฟล์เหล่านี้จะถูกเพิ่มลงในแพ็คเกจที่บีบอัด ตัวอย่างเช่น:
// ขั้นตอนแรก นำเข้าโมดูลที่จำเป็น const fs = need('fs'); const archiver = need('archiver'); // ขั้นตอนที่สอง สร้างสตรีมแบบเขียนได้เพื่อเขียนข้อมูล const output = fs.createWriteStream ( __dirname + "/hello.zip");// บันทึกแพ็คเกจที่บีบอัดลงในไดเร็กทอรีของโปรเจ็กต์ปัจจุบัน และแพ็คเกจที่บีบอัดจะมีชื่อว่า test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//ตั้งค่าระดับการบีบอัด//ขั้นตอนที่สามคือการสร้างการเชื่อมต่อไปป์ไลน์ archive.pipe(output);//ขั้นตอนที่สี่คือการบีบอัดไฟล์หลายไฟล์ลงในแพ็คเกจที่บีบอัด archive.append('index.html', {ชื่อ: 'index.html'});archive.append('hello.js', {ชื่อ: 'hello.js'});archive.append('hello.html', {ชื่อ: 'hello.html' });archive .append('db.json', {name: 'db.json'});// ขั้นตอนที่ห้าคือการทำให้ไฟล์บีบอัด archive.finalize();หากคุณต้องการบีบอัดไดเร็กทอรี คุณต้องใช้ archive.directory() เพื่อบีบอัด API มีดังนี้:
// แพ็คและบีบอัดไดเร็กทอรีที่ระบุลงในแพ็คเกจที่บีบอัด และเปลี่ยนชื่อเป็น new-subdir และไฟล์ทั้งหมดในไดเร็กทอรี subdir จะยังคงอยู่ในไดเร็กทอรี new-subdir ไม่ใช่ในไดเร็กทอรีรากของแพ็คเกจที่บีบอัด archive.directory( 'subdir /', 'new-subdir');// แพ็คและบีบอัดไฟล์ทั้งหมดในไดเร็กทอรีที่ระบุลงในแพ็คเกจที่บีบอัด และไฟล์เหล่านี้อยู่ในไดเร็กทอรีรากของแพ็คเกจที่บีบอัด ไม่ใช่ในไดเร็กทอรีย่อย archive.directory(' เขตย่อย/', เท็จ);ตัวอย่างที่สมบูรณ์มีดังนี้:
// ขั้นตอนแรก นำเข้าโมดูลที่จำเป็น const fs = need('fs'); const archiver = need('archiver'); // ขั้นตอนที่สอง สร้างสตรีมแบบเขียนได้เพื่อเขียนข้อมูล const output = fs.createWriteStream ( __dirname + "/hello.zip");// บันทึกแพ็คเกจที่บีบอัดลงในไดเร็กทอรีของโปรเจ็กต์ปัจจุบัน และแพ็คเกจที่บีบอัดจะมีชื่อว่า test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//ตั้งค่าระดับการบีบอัด//ขั้นตอนที่สามคือการสร้างการเชื่อมต่อไปป์ไลน์ archive.pipe(output);//ขั้นตอนที่สี่คือการบีบอัดไดเร็กทอรีลงในแพ็คเกจที่บีบอัด archive.directory('public/', ' new-public'); archive.directory('demo/', false);// ขั้นตอนที่ห้าคือการทำให้ไฟล์ archive.finalize ();การเรียนรู้ที่แนะนำ: "วิดีโอสอน nodejs"
ข้างต้นคือรายละเอียดเกี่ยวกับวิธีใช้ Archiver ใน nodejs สำหรับข้อมูลเพิ่มเติม โปรดอ่านบทความอื่นๆ ที่เกี่ยวข้องบนเว็บไซต์นี้