mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2026-03-13 22:22:37 +03:00
Added manifest building.
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
const webpack = require("webpack");
|
||||
const path = require('path');
|
||||
const CopyPlugin = require('copy-webpack-plugin');
|
||||
const BuildManifest = require('./webpack.manifest');
|
||||
const srcDir = '../src/';
|
||||
|
||||
module.exports = {
|
||||
module.exports = env => ({
|
||||
entry: {
|
||||
popup: path.join(__dirname, srcDir + 'popup.ts'),
|
||||
background: path.join(__dirname, srcDir + 'background.ts'),
|
||||
@@ -34,11 +35,14 @@ module.exports = {
|
||||
},
|
||||
plugins: [
|
||||
// exclude locale files in moment
|
||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
new CopyPlugin([
|
||||
{ from: '.', to: '../' }
|
||||
{ from: '.', to: '../', ignore: ['manifest.json'] }
|
||||
],
|
||||
{context: 'public' }
|
||||
),
|
||||
new BuildManifest({
|
||||
browser: env.browser,
|
||||
pretty: env.mode === "production"
|
||||
})
|
||||
]
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const merge = require('webpack-merge');
|
||||
const common = require('./webpack.common.js');
|
||||
|
||||
module.exports = merge(common, {
|
||||
module.exports = env => merge(common(env), {
|
||||
devtool: 'inline-source-map',
|
||||
mode: 'development'
|
||||
});
|
||||
65
webpack/webpack.manifest.js
Normal file
65
webpack/webpack.manifest.js
Normal file
@@ -0,0 +1,65 @@
|
||||
const webpack = require("webpack");
|
||||
const path = require('path');
|
||||
const CopyPlugin = require('copy-webpack-plugin');
|
||||
const validateOptions = require('schema-utils');
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const manifest = require("../manifest/manifest.json");
|
||||
const firefoxManifestExtra = require("../manifest/firefox-manifest-extra.json");
|
||||
const chromeManifestExtra = require("../manifest/chrome-manifest-extra.json");
|
||||
|
||||
// schema for options object
|
||||
const schema = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
browser: {
|
||||
type: 'string'
|
||||
},
|
||||
pretty: {
|
||||
type: 'boolean'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class BuildManifest {
|
||||
constructor (options = {}) {
|
||||
validateOptions(schema, options, "Build Manifest Plugin");
|
||||
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
apply(compiler) {
|
||||
const distManifestFile = path.resolve(__dirname, "../dist/manifest.json");
|
||||
|
||||
// Add missing manifest elements
|
||||
if (this.options.browser.toLowerCase() === "firefox") {
|
||||
mergeObjects(manifest, firefoxManifestExtra);
|
||||
} else if (this.options.browser.toLowerCase() === "chrome" || this.options.browser.toLowerCase() === "chromium") {
|
||||
mergeObjects(manifest, chromeManifestExtra);
|
||||
}
|
||||
|
||||
let result = JSON.stringify(manifest);
|
||||
if (this.options.pretty) result = JSON.stringify(manifest, null, 2);
|
||||
|
||||
fs.writeFileSync(distManifestFile, result);
|
||||
}
|
||||
}
|
||||
|
||||
function mergeObjects(object1, object2) {
|
||||
for (const key in object2) {
|
||||
if (key in object1) {
|
||||
if (Array.isArray(object1[key])) {
|
||||
object1[key] = object1[key].concat(object2[key]);
|
||||
} else if (typeof object1[key] == 'object') {
|
||||
mergeObjects(object1[key], object2[key]);
|
||||
} else {
|
||||
object1[key] = object2[key];
|
||||
}
|
||||
} else {
|
||||
object1[key] = object2[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BuildManifest;
|
||||
@@ -1,6 +1,11 @@
|
||||
const merge = require('webpack-merge');
|
||||
const common = require('./webpack.common.js');
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'production'
|
||||
});
|
||||
module.exports = env => {
|
||||
let mode = "production";
|
||||
env.mode = mode;
|
||||
|
||||
return merge(common(env), {
|
||||
mode
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user