From 57833f411c9f3a0c223f66be4ecc3df8442bb8a3 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Thu, 18 Mar 2021 10:50:55 -0700 Subject: [PATCH] fix: avoid duplicate assets with webpack-assets tag (#51) --- components/webpack-assets/index.marko | 13 +++++++-- .../__snapshots__/webpack4/server--main.js | 29 ++++++++++++------- .../__snapshots__/webpack5/server--main.js | 29 ++++++++++++------- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/components/webpack-assets/index.marko b/components/webpack-assets/index.marko index eac6169..a0d463a 100644 --- a/components/webpack-assets/index.marko +++ b/components/webpack-assets/index.marko @@ -1,16 +1,23 @@ import manifest from "!!@marko/webpack/loader!?manifest"; $ const { entry, scriptAttrs, styleAttrs } = input; $ const assets = manifest.getAssets(entry, out.global.buildName); +$ const written = out.global.___writtenAssets || (out.global.___writtenAssets = new Set()); $ const nonce = out.global.cspNonce; - `); + + if (!written.has(js)) { + written.add(js); + out.w(``); + } } } @@ -141,11 +146,15 @@ _marko_template._ = marko_dist_runtime_components_renderer__WEBPACK_IMPORTED_MOD for (const css of assets.css) { const _keyScope2 = `[${_keyValue2++}]`; - out.w(``); + + if (!written.has(css)) { + written.add(css); + out.w(``); + } } } }, { diff --git a/src/__tests__/fixtures/asset-tag/__snapshots__/webpack5/server--main.js b/src/__tests__/fixtures/asset-tag/__snapshots__/webpack5/server--main.js index 61bc7cc..3d313de 100644 --- a/src/__tests__/fixtures/asset-tag/__snapshots__/webpack5/server--main.js +++ b/src/__tests__/fixtures/asset-tag/__snapshots__/webpack5/server--main.js @@ -38,6 +38,7 @@ _marko_template._ = marko_dist_runtime_components_renderer__WEBPACK_IMPORTED_MOD styleAttrs } = input; const assets = _marko_webpack_loader_manifest__WEBPACK_IMPORTED_MODULE_1__.default.getAssets(entry, out.global.buildName); + const written = out.global.___writtenAssets || (out.global.___writtenAssets = new Set()); if (assets.js) { const nonce = out.global.cspNonce; @@ -45,11 +46,15 @@ _marko_template._ = marko_dist_runtime_components_renderer__WEBPACK_IMPORTED_MOD for (const js of assets.js) { const _keyScope = `[${_keyValue++}]`; - out.w(``); + + if (!written.has(js)) { + written.add(js); + out.w(``); + } } } @@ -58,11 +63,15 @@ _marko_template._ = marko_dist_runtime_components_renderer__WEBPACK_IMPORTED_MOD for (const css of assets.css) { const _keyScope2 = `[${_keyValue2++}]`; - out.w(``); + + if (!written.has(css)) { + written.add(css); + out.w(``); + } } } }, {