forked from mirror/_s
Add a bundle script to generate a zip file for theme distribution (#1417)
This commit is contained in:
parent
572888d9cf
commit
dfd1dd9e48
|
@ -0,0 +1,91 @@
|
||||||
|
#!/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',
|
||||||
|
];
|
||||||
|
|
||||||
|
// 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();
|
|
@ -18,6 +18,7 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@wordpress/scripts": "^9.0.0",
|
"@wordpress/scripts": "^9.0.0",
|
||||||
|
"archiver": "^4.0.1",
|
||||||
"node-sass": "^4.14.0",
|
"node-sass": "^4.14.0",
|
||||||
"rtlcss": "^2.5.0"
|
"rtlcss": "^2.5.0"
|
||||||
},
|
},
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
"compile:css": "node-sass sass/style.scss style.css && node-sass sass/woocommerce.scss woocommerce.css && stylelint '*.css' --fix || true && stylelint '*.css' --fix",
|
"compile:css": "node-sass sass/style.scss style.css && node-sass sass/woocommerce.scss woocommerce.css && stylelint '*.css' --fix || true && stylelint '*.css' --fix",
|
||||||
"compile:rtl": "rtlcss style.css style-rtl.css",
|
"compile:rtl": "rtlcss style.css style-rtl.css",
|
||||||
"lint:scss": "wp-scripts lint-style 'sass/**/*.scss'",
|
"lint:scss": "wp-scripts lint-style 'sass/**/*.scss'",
|
||||||
"lint:js": "wp-scripts lint-js 'js/*.js'"
|
"lint:js": "wp-scripts lint-js 'js/*.js'",
|
||||||
|
"bundle": "node bin/bundle.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue