using my boilerplate yuh
This commit is contained in:
35
webpack/utils/zipProductionBuild.ts
Normal file
35
webpack/utils/zipProductionBuild.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import fs, { mkdirSync } from 'fs';
|
||||
import archiver from 'archiver';
|
||||
import chalk from 'chalk';
|
||||
import path from 'path';
|
||||
|
||||
/**
|
||||
* Creates a zip file from the given source directory
|
||||
* @param fileName the name of the zip file to create
|
||||
* @param outDir the directory to zip up
|
||||
* @param globOptions the glob options to use when finding files to zip
|
||||
* @returns
|
||||
*/
|
||||
export async function zipProductionBuild(fileName: string) {
|
||||
const outDirectory = path.resolve('build');
|
||||
const artifactsDir = path.join(outDirectory, 'artifacts');
|
||||
|
||||
mkdirSync(artifactsDir, { recursive: true });
|
||||
|
||||
const output = fs.createWriteStream(`${artifactsDir}/${fileName}.zip`);
|
||||
const archive = archiver('zip', {
|
||||
zlib: { level: 9 },
|
||||
});
|
||||
archive.pipe(output);
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
output.on('close', resolve);
|
||||
archive.on('warning', warn => console.log(chalk.red(warn)));
|
||||
archive.on('error', err => reject(err));
|
||||
});
|
||||
|
||||
archive.glob('**/*', { cwd: outDirectory, ignore: ['*.zip', 'artifacts'] });
|
||||
// eslint-disable-next-line no-void
|
||||
void archive.finalize(); // The promise returned is what's `await-ed`, not the call to `finalize()`
|
||||
return promise;
|
||||
}
|
||||
Reference in New Issue
Block a user