/
bundle.js
92 lines (80 loc) · 2.05 KB
/
bundle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env node
const path = require( 'path' );
const fs = require( 'fs' );
const archiver = require('archiver');
// Contains the excluded files and folders.
const excludes = [
'.DS_Store',
'.stylelintrc.json',
'.eslintrc',
'.git',
'.gitattributes',
'.github',
'.gitignore',
'README.md',
'bin',
'composer.json',
'composer.lock',
'node_modules',
'package-lock.json',
'package.json',
'vendor',
'.travis.yml',
'phpcs.xml.dist',
'sass',
'style.css.map',
];
// The path of the zip file.
const zipPath = path.join(
__dirname,
'/../../',
path.basename(path.dirname(__dirname))
) + '.zip';
// Create a file to stream archive data to.
let output = fs.createWriteStream( zipPath );
let archive = archiver('zip', {
zlib: { level: 9 }
});
/**
* Recursively traverse the directory tree and append the files to the archive.
* @param {string} directoryPath - The path of the directory being looped through.
*/
function traverseDirectoryTree( directoryPath ) {
const files = fs.readdirSync( directoryPath );
for ( const i in files ) {
const currentPath = directoryPath + '/' + files[i];
const stats = fs.statSync( currentPath );
let relativePath = path.relative(process.cwd(), currentPath);
if ( stats.isFile() && ! excludes.includes( files[i] ) ) {
archive.file(currentPath, {
name: `${relativePath}`
});
} else if ( stats.isDirectory() && ! excludes.includes( files[i] ) ) {
traverseDirectoryTree( currentPath );
}
}
}
// Listen for all archive data to be written.
output.on('close', function () {
console.log(`Created ${path.basename(path.dirname(__dirname))}.zip of ${archive.pointer()} bytes`);
});
// Catch warnings during archiving.
archive.on('warning', function(err) {
if (err.code === 'ENOENT') {
// log warning
console.log(err);
} else {
// throw error
throw err;
}
});
// Catch errors during archiving.
archive.on('error', function(err){
throw err;
});
// Pipe archive data to the file.
archive.pipe(output);
// Append the files to the archive.
traverseDirectoryTree( '.' );
// Finalize the archive.
archive.finalize();