Build exclude files (#1125)

* Add support for excluding files from the build process

* Delete existing file before creating .zip

* Exclude sw.js from non-MV3 builds
This commit is contained in:
toasted-nutbread 2020-12-18 16:46:00 -05:00 committed by GitHub
parent 51223abfa6
commit 0d0728fac0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 6 deletions

View File

@ -27,15 +27,18 @@ function clone(value) {
return JSON.parse(JSON.stringify(value));
}
async function createZip(directory, outputFileName, sevenZipExes=[], onUpdate=null) {
async function createZip(directory, excludeFiles, outputFileName, sevenZipExes=[], onUpdate=null) {
fs.unlinkSync(outputFileName);
for (const exe of sevenZipExes) {
try {
const excludeArguments = excludeFiles.map((excludeFilePath) => `-x!${excludeFilePath}`);
childProcess.execFileSync(
exe,
[
'a',
outputFileName,
'.'
'.',
...excludeArguments
],
{
cwd: directory
@ -46,12 +49,13 @@ async function createZip(directory, outputFileName, sevenZipExes=[], onUpdate=nu
// NOP
}
}
return await createJSZip(directory, outputFileName, onUpdate);
return await createJSZip(directory, excludeFiles, outputFileName, onUpdate);
}
async function createJSZip(directory, outputFileName, onUpdate) {
async function createJSZip(directory, excludeFiles, outputFileName, onUpdate) {
const JSZip = util.JSZip;
const files = getAllFiles(directory, directory);
removeItemsFromArray(files, excludeFiles);
const zip = new JSZip();
for (const fileName of files) {
zip.file(
@ -75,6 +79,27 @@ async function createJSZip(directory, outputFileName, onUpdate) {
fs.writeFileSync(outputFileName, data, {encoding: null, flag: 'w'});
}
function removeItemsFromArray(array, removeItems) {
for (const item of removeItems) {
const index = getIndexOfFilePath(array, item);
if (index >= 0) {
array.splice(index, 1);
}
}
}
function getIndexOfFilePath(array, item) {
const pattern = /\\/g;
const separator = '/';
item = item.replace(pattern, separator);
for (let i = 0, ii = array.length; i < ii; ++i) {
if (array[i].replace(pattern, separator) === item) {
return i;
}
}
return -1;
}
function applyModifications(manifest, modifications) {
if (Array.isArray(modifications)) {
for (const modification of modifications) {
@ -271,6 +296,9 @@ async function build(manifest, buildDir, extDir, manifestPath, variantMap, varia
if (typeof variant === 'undefined') { continue; }
const {name, fileName, fileCopies} = variant;
let {excludeFiles} = variant;
if (!Array.isArray(excludeFiles)) { excludeFiles = []; }
process.stdout.write(`Building ${name}...\n`);
const modifiedManifest = createVariantManifest(manifest, variant, variantMap);
@ -278,7 +306,7 @@ async function build(manifest, buildDir, extDir, manifestPath, variantMap, varia
const fileNameSafe = path.basename(fileName);
const fullFileName = path.join(buildDir, fileNameSafe);
fs.writeFileSync(manifestPath, createManifestString(modifiedManifest));
await createZip(extDir, fullFileName, sevenZipExes, onUpdate);
await createZip(extDir, excludeFiles, fullFileName, sevenZipExes, onUpdate);
if (Array.isArray(fileCopies)) {
for (const fileName2 of fileCopies) {

View File

@ -108,7 +108,10 @@
"variants": [
{
"name": "chrome",
"fileName": "yomichan-chrome.zip"
"fileName": "yomichan-chrome.zip",
"excludeFiles": [
"sw.js"
]
},
{
"name": "chrome-dev",
@ -128,6 +131,9 @@
"patternFlags": "",
"replacement": "$1. This is a development build; get the stable version here: https://tinyurl.com/yaatdjmp"
}
],
"excludeFiles": [
"sw.js"
]
},
{
@ -179,6 +185,9 @@
}
}
}
],
"excludeFiles": [
"sw.js"
]
},
{
@ -205,6 +214,9 @@
"path": ["browser_specific_settings", "gecko", "id"],
"value": "alex.testing@foosoft.net"
}
],
"excludeFiles": [
"sw.js"
]
}
]