also write unhashed assets from asset map

This commit is contained in:
Bruno Windels 2020-10-02 09:33:35 +02:00
parent 4a19c8d575
commit 441bfa4890

View file

@ -82,8 +82,7 @@ async function build() {
await buildOffline(version, assets); await buildOffline(version, assets);
} }
await buildHtml(doc, version, assets); await buildHtml(doc, version, assets);
// 3 unhashed assets: index.html, manifest.appcache and sw.js console.log(`built hydrogen ${version} successfully with ${assets.all().length} files`);
console.log(`built hydrogen ${version} successfully with ${assets.all().length + 3} files`);
} }
async function findThemes(doc, callback) { async function findThemes(doc, callback) {
@ -151,10 +150,10 @@ async function buildHtml(doc, version, assets) {
versionScript.text(vSource); versionScript.text(vSource);
if (offline) { if (offline) {
doc("html").attr("manifest", "manifest.appcache"); doc("html").attr("manifest", assets.resolve("manifest.appcache"));
doc("head").append(`<link rel="manifest" href="${assets.resolve("manifest.json")}">`); doc("head").append(`<link rel="manifest" href="${assets.resolve("manifest.json")}">`);
} }
await fs.writeFile(path.join(targetDir, "index.html"), doc.html(), "utf8"); await assets.writeUnhashed("index.html", doc.html());
} }
async function buildJs(inputFile) { async function buildJs(inputFile) {
@ -225,13 +224,13 @@ async function buildOffline(version, assets) {
appCacheLines.push(...assets.allWithout(["hydrogen.js"])); appCacheLines.push(...assets.allWithout(["hydrogen.js"]));
const swOfflineFiles = assets.allWithout(["hydrogen-legacy.js", "olm_legacy.js"]); const swOfflineFiles = assets.allWithout(["hydrogen-legacy.js", "olm_legacy.js"]);
const appCacheManifest = appCacheLines.join("\n") + "\n"; const appCacheManifest = appCacheLines.join("\n") + "\n";
await fs.writeFile(path.join(targetDir, "manifest.appcache"), appCacheManifest, "utf8"); await assets.writeUnhashed("manifest.appcache", appCacheManifest);
// write service worker // write service worker
let swSource = await fs.readFile(path.join(projectDir, "src/service-worker.template.js"), "utf8"); let swSource = await fs.readFile(path.join(projectDir, "src/service-worker.template.js"), "utf8");
swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`); swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`);
swSource = swSource.replace(`"%%OFFLINE_FILES%%"`, JSON.stringify(swOfflineFiles)); swSource = swSource.replace(`"%%OFFLINE_FILES%%"`, JSON.stringify(swOfflineFiles));
// service worker should not have a hashed name as it is polled by the browser for updates // service worker should not have a hashed name as it is polled by the browser for updates
await fs.writeFile(path.join(targetDir, "sw.js"), swSource, "utf8"); await assets.writeUnhashed("sw.js", swSource);
await assets.write("manifest.json", JSON.stringify(webManifest)); await assets.write("manifest.json", JSON.stringify(webManifest));
} }
@ -362,6 +361,17 @@ class AssetMap {
} }
return relPath; return relPath;
} }
async writeUnhashed(resourcePath, content) {
const relPath = this._toRelPath(resourcePath);
this._assets.set(relPath, relPath);
const fullPath = path.join(this.directory, relPath);
if (typeof content === "string") {
await fs.writeFile(fullPath, content, "utf8");
} else {
await fs.writeFile(fullPath, content);
}
return relPath;
} }
get directory() { get directory() {