| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- const fs = require('fs');
- const path = require('path');
- const archiver = require('archiver');
- const packageJson = require('../package.json');
- const root = path.join(__dirname, '../');
- // create a file to stream archive data to.
- const output = fs.createWriteStream(path.join(root, `${packageJson.name}.zip`));
- const archive = archiver('zip', {
- zlib: { level: 9 }, // Sets the compression level.
- });
- // listen for all archive data to be written
- // 'close' event is fired only when a file descriptor is involved
- output.on('close', () => {
- console.log(archive.pointer() + ' total bytes');
- console.log(
- 'archiver has been finalized and the output file descriptor has closed.',
- );
- });
- // This event is fired when the data source is drained no matter what was the data source.
- // It is not part of this library but rather from the NodeJS Stream API.
- // @see: https://nodejs.org/api/stream.html#stream_event_end
- output.on('end', () => {
- console.log('Data has been drained');
- });
- // good practice to catch warnings (ie stat failures and other non-blocking errors)
- archive.on('warning', (err) => {
- if (err.code === 'ENOENT') {
- // log warning
- } else {
- // throw error
- throw err;
- }
- });
- // good practice to catch this error explicitly
- archive.on('error', (err) => {
- throw err;
- });
- // pipe archive data to the file
- archive.pipe(output);
- const fileJob = fs.readdirSync(root, {
- withFileTypes: true,
- encoding: 'utf-8',
- });
- fileJob.forEach((job) => {
- if (job.isFile()) {
- if (!['.DS_Store', `${packageJson.name}.zip`].includes(job.name)) {
- const file = path.join(root, job.name);
- archive.append(fs.createReadStream(file), { name: job.name });
- }
- } else if (job.isDirectory()) {
- const dir = path.join(root, `${job.name}/`);
- if (!['node_modules', 'example', '.git', '.zip'].includes(job.name)) {
- archive.directory(dir, job.name);
- }
- }
- });
- // append a file from stream
- // archive.directory(path.join(__dirname, '../config/'), 'config')
- // finalize the archive (ie we are done appending files but streams have to finish yet)
- // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand
- archive.finalize();
|