Added manifest building.

This commit is contained in:
Ajay Ramachandran
2020-02-04 01:32:58 -05:00
parent da364b49f0
commit 09a33c4252
11 changed files with 173 additions and 91 deletions

View File

@@ -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"
})
]
};
});

View File

@@ -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'
});

View 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;

View File

@@ -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
});
};