forked from mystiq/hydrogen-web
replace global hash in given chunks
This commit is contained in:
parent
c344032c0a
commit
8e4da396ea
4 changed files with 24 additions and 6 deletions
|
@ -15,6 +15,7 @@ module.exports = {
|
||||||
"no-unused-vars": "warn"
|
"no-unused-vars": "warn"
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"HYDROGEN_VERSION": "readonly"
|
"HYDROGEN_VERSION": "readonly",
|
||||||
|
"HYDROGEN_GLOBAL_HASH": "readonly"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,7 +8,7 @@ function contentHash(str) {
|
||||||
return hasher.digest();
|
return hasher.digest();
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function injectServiceWorker(swFile, otherUncachedFiles) {
|
module.exports = function injectServiceWorker(swFile, otherUncachedFiles, globalHashChunkReplaceMap) {
|
||||||
const swName = path.basename(swFile);
|
const swName = path.basename(swFile);
|
||||||
let root;
|
let root;
|
||||||
let version;
|
let version;
|
||||||
|
@ -43,6 +43,7 @@ module.exports = function injectServiceWorker(swFile, otherUncachedFiles) {
|
||||||
const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap);
|
const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap);
|
||||||
const sw = bundle[swName];
|
const sw = bundle[swName];
|
||||||
sw.code = replaceConstsInServiceWorker(sw.code, version, globalHash, assets);
|
sw.code = replaceConstsInServiceWorker(sw.code, version, globalHash, assets);
|
||||||
|
replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash);
|
||||||
console.log(`\nBuilt ${version} (${globalHash})`);
|
console.log(`\nBuilt ${version} (${globalHash})`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -115,3 +116,14 @@ function replaceConstsInServiceWorker(swSource, version, globalHash, assets) {
|
||||||
swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.find(a => a.name === "icon.png").fileName);
|
swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.find(a => a.name === "icon.png").fileName);
|
||||||
return swSource;
|
return swSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash) {
|
||||||
|
for (const [name, placeholder] of Object.entries(globalHashChunkReplaceMap)) {
|
||||||
|
const chunk = assets.find(a => a.type === "chunk" && a.name === name);
|
||||||
|
if (!chunk) {
|
||||||
|
throw new Error(`could not find chunk ${name} to replace global hash placeholder`);
|
||||||
|
}
|
||||||
|
console.log(placeholder, globalHash);
|
||||||
|
chunk.code = chunk.code.replaceAll(placeholder, `"${globalHash}"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -15,10 +15,10 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export function hydrogenGithubLink(t) {
|
export function hydrogenGithubLink(t) {
|
||||||
if (HYDROGEN_VERSION) {
|
if (HYDROGEN_VERSION && HYDROGEN_GLOBAL_HASH) {
|
||||||
return t.a({target: "_blank",
|
return t.a({target: "_blank",
|
||||||
href: `https://github.com/vector-im/hydrogen-web/releases/tag/v${HYDROGEN_VERSION}`},
|
href: `https://github.com/vector-im/hydrogen-web/releases/tag/v${HYDROGEN_VERSION}`},
|
||||||
`Hydrogen v${HYDROGEN_VERSION} (${window.HYDROGEN_GLOBAL_HASH}) on Github`);
|
`Hydrogen v${HYDROGEN_VERSION} (${HYDROGEN_GLOBAL_HASH}) on Github`);
|
||||||
} else {
|
} else {
|
||||||
return t.a({target: "_blank", href: "https://github.com/vector-im/hydrogen-web"},
|
return t.a({target: "_blank", href: "https://github.com/vector-im/hydrogen-web"},
|
||||||
"Hydrogen on Github");
|
"Hydrogen on Github");
|
||||||
|
|
|
@ -4,6 +4,7 @@ const flexbugsFixes = require("postcss-flexbugs-fixes");
|
||||||
|
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
const GLOBAL_HASH_PLACEHOLDER = "hydrogen-global-hash-placeholder-4cf32306-5d61-4262-9a57-c9983f472c3c";
|
||||||
|
|
||||||
const injectWebManifest = require("./scripts/build-plugins/manifest");
|
const injectWebManifest = require("./scripts/build-plugins/manifest");
|
||||||
const injectServiceWorker = require("./scripts/build-plugins/service-worker");
|
const injectServiceWorker = require("./scripts/build-plugins/service-worker");
|
||||||
|
@ -50,10 +51,14 @@ export default {
|
||||||
// important this comes before service worker
|
// important this comes before service worker
|
||||||
// otherwise the manifest and the icons it refers to won't be cached
|
// otherwise the manifest and the icons it refers to won't be cached
|
||||||
injectWebManifest("assets/manifest.json"),
|
injectWebManifest("assets/manifest.json"),
|
||||||
injectServiceWorker("./src/platform/web/sw.js", ["index.html"]),
|
injectServiceWorker("./src/platform/web/sw.js", ["index.html"], {
|
||||||
|
// replace global hash placeholder in index chunk
|
||||||
|
"index": JSON.stringify(GLOBAL_HASH_PLACEHOLDER)
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
define: {
|
define: {
|
||||||
"HYDROGEN_VERSION": JSON.stringify(version)
|
"HYDROGEN_VERSION": JSON.stringify(version),
|
||||||
|
"HYDROGEN_GLOBAL_HASH": JSON.stringify(GLOBAL_HASH_PLACEHOLDER)
|
||||||
},
|
},
|
||||||
css: {
|
css: {
|
||||||
postcss: {
|
postcss: {
|
||||||
|
|
Loading…
Reference in a new issue