aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/webpack.config.js32
-rw-r--r--config/webpack/loader/count-imports-loader.js18
-rw-r--r--config/webpack/plugins/create-manifest-webpack-plugin/index.js20
-rw-r--r--config/webpack/utils/shared-modules.js4
4 files changed, 53 insertions, 21 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 22544b9..98315b0 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -22,6 +22,12 @@ const scripts = webpackRequire("utils/scripts");
const sharedModules = webpackRequire("utils/shared-modules");
+const sharedModulesImportedCount = {};
+
+for (const sharedModule of sharedModules) {
+ sharedModulesImportedCount[sharedModule] = 0;
+}
+
const uninjectedScriptEntries = {};
const injectedAfterScriptEntries = {};
const injectedBeforeScriptEntries = {};
@@ -94,20 +100,25 @@ const commonOptions = {
}
};
-const ecmaScriptModuleOptions = {
- experiments: {
- outputModule: true
- }
-};
-
const sharedModuleOptions = {
externals: sharedModuleExternals,
- externalsType: "var"
+ externalsType: "var",
+ module: {
+ rules: [
+ {
+ test: /\.(j|t)s$/,
+ loader: path.resolve(CONFIG_DIR, "webpack/loader/count-imports-loader.js"),
+ options: {
+ sharedModulesImportedCount
+ },
+ enforce: "post"
+ }
+ ]
+ },
};
const uninjectedScriptConfiguration = merge(
commonOptions,
- ecmaScriptModuleOptions,
sharedModuleOptions,
{
entry: uninjectedScriptEntries,
@@ -144,12 +155,13 @@ const injectedBeforeScriptConfiguration = merge(
const sharedModulesConfiguration = merge(
commonOptions,
- ecmaScriptModuleOptions,
sharedModuleOptions,
{
entry: sharedModuleEntries,
plugins: [
- new CreateManifestPlugin(),
+ new CreateManifestPlugin({
+ sharedModulesImportedCount
+ }),
new CreateRulesPlugin()
]
}
diff --git a/config/webpack/loader/count-imports-loader.js b/config/webpack/loader/count-imports-loader.js
new file mode 100644
index 0000000..4c3faa4
--- /dev/null
+++ b/config/webpack/loader/count-imports-loader.js
@@ -0,0 +1,18 @@
+const { ImportManager } = require("import-manager");
+
+const sharedModules = webpackRequire("utils/shared-modules.js");
+
+module.exports = function(source) {
+ const { sharedModulesImportedCount } = this.getOptions();
+ const manager = new ImportManager(source);
+
+ for (const unit of manager.imports.es6.units) {
+ const moduleIndex = sharedModules.indexOf(unit.module.name);
+
+ if (moduleIndex >= 0) {
+ sharedModulesImportedCount[sharedModules[moduleIndex]]++;
+ }
+ }
+
+ return source;
+};
diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
index a2040da..103fb3c 100644
--- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js
+++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
@@ -8,6 +8,10 @@ const sharedModules = webpackRequire("utils/shared-modules");
const manifest = webpackRequire("plugins/create-manifest-webpack-plugin/manifest-template.json");
class CreateManifestPlugin {
+ constructor({ sharedModulesImportedCount }) {
+ this.sharedModulesImportedCount = sharedModulesImportedCount;
+ }
+
apply(compiler) {
compiler.hooks.compilation.tap("CreateManifestPlugin", compilation => {
compilation.hooks.processAssets.tap(
@@ -20,6 +24,14 @@ class CreateManifestPlugin {
manifest.version = require(path.resolve(ROOT_DIR, "package.json")).version;
manifest.content_scripts = [];
+ manifest.content_scripts.push({
+ matches: [`*://banglarbhumi.gov.in/BanglarBhumi/*`],
+ js: sharedModules
+ .filter(sharedModule => this.sharedModulesImportedCount[sharedModule] > 0)
+ .map(sharedModule => `shared/${getFileNameHash(sharedModule, "shared")}.js`),
+ run_at: "document_start"
+ });
+
for (const scriptPath in scripts) {
for (const scriptType in scripts[scriptPath]) {
const matches = [`*://banglarbhumi.gov.in/BanglarBhumi/${scriptPath}`];
@@ -35,14 +47,6 @@ class CreateManifestPlugin {
}
}
- for (const sharedModule of sharedModules) {
- manifest.content_scripts.push({
- matches: [`*://banglarbhumi.gov.in/BanglarBhumi/*`],
- js: [`shared/${getFileNameHash(sharedModule, "shared")}.js`],
- run_at: "document_start"
- });
- }
-
const resources = [];
for (const assetName in assets) {
diff --git a/config/webpack/utils/shared-modules.js b/config/webpack/utils/shared-modules.js
index 974145f..1584f0f 100644
--- a/config/webpack/utils/shared-modules.js
+++ b/config/webpack/utils/shared-modules.js
@@ -1,8 +1,6 @@
const path = require("path");
const fs = require("fs");
-const sharedModules = fs.readdirSync(path.resolve(SOURCE_DIR, "shared"))
+module.exports = fs.readdirSync(path.resolve(SOURCE_DIR, "shared"))
.filter(sharedModule => !sharedModule.endsWith("import-shared.js"))
.map(sharedModule => sharedModule.substring(0, sharedModule.length - 3));
-
-module.exports = sharedModules;