В nodejs архиватор используется для сжатия и упаковки некоторых файлов в сжатые пакеты в формате zip или tar; архиватор — это модуль, который может реализовывать функции упаковки на разных платформах. Форматы упаковки — zip и tar. " заявление Установите этот модуль перед использованием.
Операционная среда в этой статье: система Windows 10, nodejs версии 12.19.0, компьютер Dell G3.
Иногда нам необходимо сжать и упаковать некоторые файлы в сжатые пакеты в формате zip или tar, а также нам может потребоваться упаковать каталоги. В Node.js для выполнения операций можно использовать сторонний архиватор пакетов.
Архиватор — это модуль, который может реализовать функцию кроссплатформенной упаковки в nodejs. Он может создавать пакеты zip и tar. Это относительно простой в использовании сторонний модуль.
Перед использованием установите модуль архива.
Код выглядит следующим образом:
npm установить архиваторВведение:
// Поскольку файл необходимо прочитать, необходим модуль fs, а также необходимо импортировать const fs = require('fs'); const archiver = require('archiver');Основное использование следующее:
// Первый шаг, импортируйте необходимые модули const fs = require('fs'); const archiver = require('archiver' // Второй шаг, создаем записываемый поток для записи данных const output = fs.createWriteStream ( __dirname + "/hello.zip");// Сохраняем сжатый пакет в каталог текущего проекта и называем сжатый пакет test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//Установим уровень сжатия//Третий шаг — установить соединение с конвейером archive.pipe(output);//Четвертый шаг — сжать указанный файл varstream = 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 Chey!', { name: 'file2.txt' });//Добавляем файл в сжатый package, добавьте файл через данные буфера const buffer3 = Buffer.from('buff it!');archive.append(buffer3, { name: 'file3.txt' });// Добавляем файл в сжатый пакет package, напрямую передать путь к файлу archive.file('file1.txt', { name: 'file4.txt' });Полный пример выглядит следующим образом:
// Первый шаг, импортируйте необходимые модули const fs = require('fs'); const archiver = require('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'), { name: 'hello.txt'});//Поток файлов archive.append('index.html', {name: 'index.html'});//Путь к файлу archive.append(Buffer .from("Это данные в формате буфера"), {name: 'buffer.txt'});// Объект буфера archive.append("Непосредственно передать строку", {name: 'string.txt'}) ;// String/ / Пятый шаг — завершение сжатия archive.finalize();Примечание. Второй параметр {name: 'hello.txt'} функции archive.append() предназначен для переименования соответствующего файла в сжатом пакете.
Если вы хотите сжать несколько файлов, просто вызовите метод archive.append() для добавления файлов. Эти дополнительные файлы будут добавлены в сжатый пакет. Например:
// Первый шаг, импортируйте необходимые модули const fs = require('fs'); const archiver = require('archiver' // Второй шаг, создаем записываемый поток для записи данных const output = fs.createWriteStream ( __dirname + "/hello.zip");// Сохраняем сжатый пакет в каталог текущего проекта и называем сжатый пакет test.zipconst archive = archiver('zip', {zlib: {level: 9}} ) ;//Установим уровень сжатия//Третий шаг — установить соединение с конвейером archive.pipe(output);//Четвертый шаг — сжать несколько файлов в сжатый пакет archive.append('index.html', {name: 'index.html'});archive.append('hello.js', {name: 'hello.js'});archive.append('hello.html', {name: 'hello.html' });archive .append('db.json', {name: 'db.json'});// Пятый шаг — завершение сжатия archive.finalize();Если вы хотите сжать каталог, вам нужно использовать для этого archive.directory(). API выглядит следующим образом:
// Упаковать и сжать указанный каталог в сжатый пакет и переименовать его в новый-подкаталог, и все файлы в подкаталоге по-прежнему будут находиться в каталоге нового-подкаталога, а не в корневом каталоге сжатого пакета archive.directory( 'subdir /', 'new-subdir'); // Упаковать и сжать все файлы в указанном каталоге в сжатый пакет, и эти файлы находятся в корневом каталоге сжатого пакета, а не в подкаталоге archive.directory(' подкаталог/', ложь);Полный пример выглядит следующим образом:
// Первый шаг, импортируйте необходимые модули const fs = require('fs'); const archiver = require('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».
Выше приведены сведения о том, как использовать архиватор в nodejs. Для получения дополнительной информации обратите внимание на другие соответствующие статьи на этом сайте!