From f7e5e046b7ddbbfc6979275e576f7017da13b561 Mon Sep 17 00:00:00 2001 From: biodiscus Date: Sat, 28 Oct 2023 12:51:34 +0200 Subject: [PATCH] fix: error when used integrity with root publicPath, #42, #43 --- CHANGELOG.md | 4 ++ package.json | 2 +- src/Plugin/Collection.js | 15 ++++-- src/Plugin/Options.js | 10 ++-- .../expected/assets/css/style.bundle.css | 0 .../expected/assets/css/vendor.bundle.css | 0 .../expected/assets/img/image.697ef306.png | Bin .../expected/assets/js/main.bundle.js | 0 .../expected/assets/js/no-integrity.bundle.js | 0 .../expected/assets/js/vendor.bundle.js | 0 .../expected/pages/index.html | 31 +++++++++++ .../src/image.png | Bin .../src/index.html | 0 .../src/main.js | 0 .../src/no-integrity.js | 0 .../src/style.css | 0 .../src/vendor.css | 0 .../src/vendor.js | 0 .../webpack.config.js | 51 ++++++++++++++++++ .../expected/assets/css/style.bundle.css | 3 ++ .../expected/assets/css/vendor.bundle.css | 3 ++ .../expected/assets/img/image.697ef306.png | Bin 0 -> 1250 bytes .../expected/assets/js/main.bundle.js | 1 + .../expected/assets/js/no-integrity.bundle.js | 1 + .../expected/assets/js/vendor.bundle.js | 1 + .../expected/index.html | 0 .../integrity-publicPath-empty/src/image.png | Bin 0 -> 1250 bytes .../integrity-publicPath-empty/src/index.html | 31 +++++++++++ .../integrity-publicPath-empty/src/main.js | 1 + .../src/no-integrity.js | 1 + .../integrity-publicPath-empty/src/style.css | 3 ++ .../integrity-publicPath-empty/src/vendor.css | 3 ++ .../integrity-publicPath-empty/src/vendor.js | 1 + .../webpack.config.js | 1 + .../expected/assets/css/style.bundle.css | 3 ++ .../expected/assets/css/vendor.bundle.css | 3 ++ .../expected/assets/img/image.697ef306.png | Bin 0 -> 1250 bytes .../expected/assets/js/main.bundle.js | 1 + .../expected/assets/js/no-integrity.bundle.js | 1 + .../expected/assets/js/vendor.bundle.js | 1 + .../expected/pages/index.html | 31 +++++++++++ .../integrity-publicPath-root/src/image.png | Bin 0 -> 1250 bytes .../integrity-publicPath-root/src/index.html | 31 +++++++++++ .../integrity-publicPath-root/src/main.js | 1 + .../src/no-integrity.js | 1 + .../integrity-publicPath-root/src/style.css | 3 ++ .../integrity-publicPath-root/src/vendor.css | 3 ++ .../integrity-publicPath-root/src/vendor.js | 1 + .../webpack.config.js | 51 ++++++++++++++++++ test/integration.test.js | 5 +- 50 files changed, 291 insertions(+), 8 deletions(-) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/css/style.bundle.css (100%) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/css/vendor.bundle.css (100%) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/img/image.697ef306.png (100%) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/js/main.bundle.js (100%) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/js/no-integrity.bundle.js (100%) rename test/cases/{integrity => integrity-publicPath-auto}/expected/assets/js/vendor.bundle.js (100%) create mode 100644 test/cases/integrity-publicPath-auto/expected/pages/index.html rename test/cases/{integrity => integrity-publicPath-auto}/src/image.png (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/index.html (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/main.js (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/no-integrity.js (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/style.css (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/vendor.css (100%) rename test/cases/{integrity => integrity-publicPath-auto}/src/vendor.js (100%) create mode 100644 test/cases/integrity-publicPath-auto/webpack.config.js create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/css/style.bundle.css create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/css/vendor.bundle.css create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/img/image.697ef306.png create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/js/main.bundle.js create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/js/no-integrity.bundle.js create mode 100644 test/cases/integrity-publicPath-empty/expected/assets/js/vendor.bundle.js rename test/cases/{integrity => integrity-publicPath-empty}/expected/index.html (100%) create mode 100644 test/cases/integrity-publicPath-empty/src/image.png create mode 100644 test/cases/integrity-publicPath-empty/src/index.html create mode 100644 test/cases/integrity-publicPath-empty/src/main.js create mode 100644 test/cases/integrity-publicPath-empty/src/no-integrity.js create mode 100644 test/cases/integrity-publicPath-empty/src/style.css create mode 100644 test/cases/integrity-publicPath-empty/src/vendor.css create mode 100644 test/cases/integrity-publicPath-empty/src/vendor.js rename test/cases/{integrity => integrity-publicPath-empty}/webpack.config.js (96%) create mode 100644 test/cases/integrity-publicPath-root/expected/assets/css/style.bundle.css create mode 100644 test/cases/integrity-publicPath-root/expected/assets/css/vendor.bundle.css create mode 100644 test/cases/integrity-publicPath-root/expected/assets/img/image.697ef306.png create mode 100644 test/cases/integrity-publicPath-root/expected/assets/js/main.bundle.js create mode 100644 test/cases/integrity-publicPath-root/expected/assets/js/no-integrity.bundle.js create mode 100644 test/cases/integrity-publicPath-root/expected/assets/js/vendor.bundle.js create mode 100644 test/cases/integrity-publicPath-root/expected/pages/index.html create mode 100644 test/cases/integrity-publicPath-root/src/image.png create mode 100644 test/cases/integrity-publicPath-root/src/index.html create mode 100644 test/cases/integrity-publicPath-root/src/main.js create mode 100644 test/cases/integrity-publicPath-root/src/no-integrity.js create mode 100644 test/cases/integrity-publicPath-root/src/style.css create mode 100644 test/cases/integrity-publicPath-root/src/vendor.css create mode 100644 test/cases/integrity-publicPath-root/src/vendor.js create mode 100644 test/cases/integrity-publicPath-root/webpack.config.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 22130b99..6d1f9d9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change log +## 2.15.1 (2023-10-28) + +- fix: error when used integrity with root publicPath, #42, #43 + ## 2.15.0 (2023-10-18) - feat: add `parsedValue` argument as an array of parsed filenames w/o URL query, in the `filter()` function of the `sources` diff --git a/package.json b/package.json index 99a290b2..341668dd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "html-bundler-webpack-plugin", - "version": "2.15.0", + "version": "2.15.1", "description": "HTML bundler plugin for webpack handles a template as an entry point, extracts CSS and JS from their sources referenced in HTML, supports template engines like Eta, EJS, Handlebars, Nunjucks.", "keywords": [ "html", diff --git a/src/Plugin/Collection.js b/src/Plugin/Collection.js index cb4160e7..1a7c17f2 100644 --- a/src/Plugin/Collection.js +++ b/src/Plugin/Collection.js @@ -818,6 +818,7 @@ class Collection { if (!rawSource) return; + const entryDirname = path.dirname(entryFilename); const importedStyles = []; let hasInlineSvg = false; let content = rawSource.source(); @@ -843,8 +844,16 @@ class Collection { // 1.1 compute CSS integrity if (isIntegrity && !inline) { - const assetContent = compilation.assets[asset.assetFile].source(); - asset.integrity = Integrity.getIntegrity(assetContent, asset.assetFile); + // path to asset relative by output.path + let pathname = asset.assetFile; + if (Options.isAutoPublicPath()) { + pathname = path.join(entryDirname, pathname); + } else if (Options.isRootPublicPath()) { + pathname = pathname.slice(1); + } + + const assetContent = compilation.assets[pathname].source(); + asset.integrity = Integrity.getIntegrity(assetContent, pathname); assetIntegrity.set(asset.assetFile, asset.integrity); if (!parseOptions.has(type)) { @@ -864,7 +873,7 @@ class Collection { if (!chunk.inline) { const assetContent = compilation.assets[chunk.chunkFile].source(); chunk.integrity = Integrity.getIntegrity(assetContent, chunk.chunkFile); - assetIntegrity.set(chunk.chunkFile, chunk.integrity); + assetIntegrity.set(chunk.assetFile, chunk.integrity); if (!parseOptions.has(type)) { parseOptions.set(type, { diff --git a/src/Plugin/Options.js b/src/Plugin/Options.js index 4d43925d..8b8c6abe 100644 --- a/src/Plugin/Options.js +++ b/src/Plugin/Options.js @@ -222,6 +222,7 @@ class Options { this.autoPublicPath = false; this.isUrlPublicPath = false; + this.rootPublicPath = false; this.isRelativePublicPath = false; this.webpackPublicPath = publicPath; @@ -231,6 +232,8 @@ class Options { this.isUrlPublicPath = true; } else if (!publicPath.startsWith('/')) { this.isRelativePublicPath = true; + } else if (publicPath.startsWith('/')) { + this.rootPublicPath = true; } } @@ -378,13 +381,14 @@ class Options { return this.options.preload != null && this.options.preload !== false; } - /** - * @return {boolean} - */ static isAutoPublicPath() { return this.autoPublicPath === true; } + static isRootPublicPath() { + return this.rootPublicPath === true; + } + /** * @return {string} */ diff --git a/test/cases/integrity/expected/assets/css/style.bundle.css b/test/cases/integrity-publicPath-auto/expected/assets/css/style.bundle.css similarity index 100% rename from test/cases/integrity/expected/assets/css/style.bundle.css rename to test/cases/integrity-publicPath-auto/expected/assets/css/style.bundle.css diff --git a/test/cases/integrity/expected/assets/css/vendor.bundle.css b/test/cases/integrity-publicPath-auto/expected/assets/css/vendor.bundle.css similarity index 100% rename from test/cases/integrity/expected/assets/css/vendor.bundle.css rename to test/cases/integrity-publicPath-auto/expected/assets/css/vendor.bundle.css diff --git a/test/cases/integrity/expected/assets/img/image.697ef306.png b/test/cases/integrity-publicPath-auto/expected/assets/img/image.697ef306.png similarity index 100% rename from test/cases/integrity/expected/assets/img/image.697ef306.png rename to test/cases/integrity-publicPath-auto/expected/assets/img/image.697ef306.png diff --git a/test/cases/integrity/expected/assets/js/main.bundle.js b/test/cases/integrity-publicPath-auto/expected/assets/js/main.bundle.js similarity index 100% rename from test/cases/integrity/expected/assets/js/main.bundle.js rename to test/cases/integrity-publicPath-auto/expected/assets/js/main.bundle.js diff --git a/test/cases/integrity/expected/assets/js/no-integrity.bundle.js b/test/cases/integrity-publicPath-auto/expected/assets/js/no-integrity.bundle.js similarity index 100% rename from test/cases/integrity/expected/assets/js/no-integrity.bundle.js rename to test/cases/integrity-publicPath-auto/expected/assets/js/no-integrity.bundle.js diff --git a/test/cases/integrity/expected/assets/js/vendor.bundle.js b/test/cases/integrity-publicPath-auto/expected/assets/js/vendor.bundle.js similarity index 100% rename from test/cases/integrity/expected/assets/js/vendor.bundle.js rename to test/cases/integrity-publicPath-auto/expected/assets/js/vendor.bundle.js diff --git a/test/cases/integrity-publicPath-auto/expected/pages/index.html b/test/cases/integrity-publicPath-auto/expected/pages/index.html new file mode 100644 index 00000000..660f893a --- /dev/null +++ b/test/cases/integrity-publicPath-auto/expected/pages/index.html @@ -0,0 +1,31 @@ + + + + Test + + + + + + + + + + + + + + + + + + + + + +

Hello World!

+ + + + + \ No newline at end of file diff --git a/test/cases/integrity/src/image.png b/test/cases/integrity-publicPath-auto/src/image.png similarity index 100% rename from test/cases/integrity/src/image.png rename to test/cases/integrity-publicPath-auto/src/image.png diff --git a/test/cases/integrity/src/index.html b/test/cases/integrity-publicPath-auto/src/index.html similarity index 100% rename from test/cases/integrity/src/index.html rename to test/cases/integrity-publicPath-auto/src/index.html diff --git a/test/cases/integrity/src/main.js b/test/cases/integrity-publicPath-auto/src/main.js similarity index 100% rename from test/cases/integrity/src/main.js rename to test/cases/integrity-publicPath-auto/src/main.js diff --git a/test/cases/integrity/src/no-integrity.js b/test/cases/integrity-publicPath-auto/src/no-integrity.js similarity index 100% rename from test/cases/integrity/src/no-integrity.js rename to test/cases/integrity-publicPath-auto/src/no-integrity.js diff --git a/test/cases/integrity/src/style.css b/test/cases/integrity-publicPath-auto/src/style.css similarity index 100% rename from test/cases/integrity/src/style.css rename to test/cases/integrity-publicPath-auto/src/style.css diff --git a/test/cases/integrity/src/vendor.css b/test/cases/integrity-publicPath-auto/src/vendor.css similarity index 100% rename from test/cases/integrity/src/vendor.css rename to test/cases/integrity-publicPath-auto/src/vendor.css diff --git a/test/cases/integrity/src/vendor.js b/test/cases/integrity-publicPath-auto/src/vendor.js similarity index 100% rename from test/cases/integrity/src/vendor.js rename to test/cases/integrity-publicPath-auto/src/vendor.js diff --git a/test/cases/integrity-publicPath-auto/webpack.config.js b/test/cases/integrity-publicPath-auto/webpack.config.js new file mode 100644 index 00000000..aad6dedd --- /dev/null +++ b/test/cases/integrity-publicPath-auto/webpack.config.js @@ -0,0 +1,51 @@ +const path = require('path'); +const HtmlBundlerPlugin = require('../../../'); + +module.exports = { + //mode: 'development', + mode: 'production', + target: 'web', + + output: { + publicPath: 'auto', // test empty + path: path.join(__dirname, 'dist/'), + crossOriginLoading: 'use-credentials', // required for test Subresource Integrity + }, + + plugins: [ + new HtmlBundlerPlugin({ + entry: { + //jquery: 'https://code.jquery.com/ui/1.13.2/jquery-ui.min.js', + //test: the relative asset file must be the same as pathname of `compilation.assets` + 'pages/index': './src/index.html', + }, + + js: { + filename: 'assets/js/[name].bundle.js', + }, + + css: { + filename: 'assets/css/[name].bundle.css', + }, + + integrity: true, // test the `true` value + }), + ], + + module: { + rules: [ + { + test: /\.css$/, + use: ['css-loader'], + }, + + { + test: /\.(png|jpe?g|ico|svg)$/, + type: 'asset/resource', + generator: { + filename: 'assets/img/[name].[hash:8][ext]', + }, + }, + ], + }, +}; diff --git a/test/cases/integrity-publicPath-empty/expected/assets/css/style.bundle.css b/test/cases/integrity-publicPath-empty/expected/assets/css/style.bundle.css new file mode 100644 index 00000000..adc68fa6 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/expected/assets/css/style.bundle.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} diff --git a/test/cases/integrity-publicPath-empty/expected/assets/css/vendor.bundle.css b/test/cases/integrity-publicPath-empty/expected/assets/css/vendor.bundle.css new file mode 100644 index 00000000..ad4f3016 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/expected/assets/css/vendor.bundle.css @@ -0,0 +1,3 @@ +h2 { + color: green; +} diff --git a/test/cases/integrity-publicPath-empty/expected/assets/img/image.697ef306.png b/test/cases/integrity-publicPath-empty/expected/assets/img/image.697ef306.png new file mode 100644 index 0000000000000000000000000000000000000000..29d95462457487e7347780175d75d743c4f07642 GIT binary patch literal 1250 zcmV<81ReW{P)004pr0{{R3_H{EN0001KP)t-s_xJbq z_V)Gl_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}() z<>ch#32auvuF;-u{rG5l|fJ}NUM|Oz~kfXaf$tcfB?nL zax(0;KSv7dIZhhb4r5W5cUYt+9lNs%y!vxh^ahta!#g4uh` zMePFOf_r8$^drMEO4!C1EG{B=ZI&a`wBLr_A1NwWwsKlp;po(I`n(js3UXWG=)7IK zxHN(`fneDNyrmTYgmyOIg5Q1};e6W=)cr-U!wE`%Lip+sq`%aH(qCW}8@_c2NYY5%G{pTJfFok*lVK{`b7ODrh;{V?3NoKi5}pWr#IV7xye2SMpCPeJJ~XF=&N zCqZq0=>?^~JO!n{oCT%7ECr>%j2AR=-({wPFt?ny;KE6NnF=l)3zOg^I0;UIf281I z1VO;87j(}FE?jsqPYD9fcKa8zEuOn?hF;F}T>d*ug1#*P1z}pyJ|g&rqf==FuiYVb zjlq#ITmQSDIR&`@I&4Pf;J6b!n5ZCbA#8#A{~+~805?D zO^+ZhY~Zw9E9?`b#&J??jXi<{Xd0Jr!_ck`0^Ai8sQ%<+T$Ut$Q9-1)=3+gMj&INJ zrS82xsGP5x&B!!$We{|NfU@(5fd20RFa-dh5X_B9a1xvZC&5YZFK{PSsxrUwVE_OC M07*qoM6N<$g7<`XtpET3 literal 0 HcmV?d00001 diff --git a/test/cases/integrity-publicPath-empty/expected/assets/js/main.bundle.js b/test/cases/integrity-publicPath-empty/expected/assets/js/main.bundle.js new file mode 100644 index 00000000..1ce9c884 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/expected/assets/js/main.bundle.js @@ -0,0 +1 @@ +console.log(">> main"); \ No newline at end of file diff --git a/test/cases/integrity-publicPath-empty/expected/assets/js/no-integrity.bundle.js b/test/cases/integrity-publicPath-empty/expected/assets/js/no-integrity.bundle.js new file mode 100644 index 00000000..4fbdad65 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/expected/assets/js/no-integrity.bundle.js @@ -0,0 +1 @@ +console.log(">> ignore integrity"); \ No newline at end of file diff --git a/test/cases/integrity-publicPath-empty/expected/assets/js/vendor.bundle.js b/test/cases/integrity-publicPath-empty/expected/assets/js/vendor.bundle.js new file mode 100644 index 00000000..5615af0f --- /dev/null +++ b/test/cases/integrity-publicPath-empty/expected/assets/js/vendor.bundle.js @@ -0,0 +1 @@ +console.log(">> vendor"); \ No newline at end of file diff --git a/test/cases/integrity/expected/index.html b/test/cases/integrity-publicPath-empty/expected/index.html similarity index 100% rename from test/cases/integrity/expected/index.html rename to test/cases/integrity-publicPath-empty/expected/index.html diff --git a/test/cases/integrity-publicPath-empty/src/image.png b/test/cases/integrity-publicPath-empty/src/image.png new file mode 100644 index 0000000000000000000000000000000000000000..29d95462457487e7347780175d75d743c4f07642 GIT binary patch literal 1250 zcmV<81ReW{P)004pr0{{R3_H{EN0001KP)t-s_xJbq z_V)Gl_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}() z<>ch#32auvuF;-u{rG5l|fJ}NUM|Oz~kfXaf$tcfB?nL zax(0;KSv7dIZhhb4r5W5cUYt+9lNs%y!vxh^ahta!#g4uh` zMePFOf_r8$^drMEO4!C1EG{B=ZI&a`wBLr_A1NwWwsKlp;po(I`n(js3UXWG=)7IK zxHN(`fneDNyrmTYgmyOIg5Q1};e6W=)cr-U!wE`%Lip+sq`%aH(qCW}8@_c2NYY5%G{pTJfFok*lVK{`b7ODrh;{V?3NoKi5}pWr#IV7xye2SMpCPeJJ~XF=&N zCqZq0=>?^~JO!n{oCT%7ECr>%j2AR=-({wPFt?ny;KE6NnF=l)3zOg^I0;UIf281I z1VO;87j(}FE?jsqPYD9fcKa8zEuOn?hF;F}T>d*ug1#*P1z}pyJ|g&rqf==FuiYVb zjlq#ITmQSDIR&`@I&4Pf;J6b!n5ZCbA#8#A{~+~805?D zO^+ZhY~Zw9E9?`b#&J??jXi<{Xd0Jr!_ck`0^Ai8sQ%<+T$Ut$Q9-1)=3+gMj&INJ zrS82xsGP5x&B!!$We{|NfU@(5fd20RFa-dh5X_B9a1xvZC&5YZFK{PSsxrUwVE_OC M07*qoM6N<$g7<`XtpET3 literal 0 HcmV?d00001 diff --git a/test/cases/integrity-publicPath-empty/src/index.html b/test/cases/integrity-publicPath-empty/src/index.html new file mode 100644 index 00000000..9cfdace5 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/index.html @@ -0,0 +1,31 @@ + + + + Test + + + + + + + + + + + + + + + + + + + + + +

Hello World!

+ + + + + \ No newline at end of file diff --git a/test/cases/integrity-publicPath-empty/src/main.js b/test/cases/integrity-publicPath-empty/src/main.js new file mode 100644 index 00000000..89ae7c12 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/main.js @@ -0,0 +1 @@ +console.log('>> main'); diff --git a/test/cases/integrity-publicPath-empty/src/no-integrity.js b/test/cases/integrity-publicPath-empty/src/no-integrity.js new file mode 100644 index 00000000..a1316638 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/no-integrity.js @@ -0,0 +1 @@ +console.log('>> ignore integrity'); diff --git a/test/cases/integrity-publicPath-empty/src/style.css b/test/cases/integrity-publicPath-empty/src/style.css new file mode 100644 index 00000000..adc68fa6 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/style.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} diff --git a/test/cases/integrity-publicPath-empty/src/vendor.css b/test/cases/integrity-publicPath-empty/src/vendor.css new file mode 100644 index 00000000..ad4f3016 --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/vendor.css @@ -0,0 +1,3 @@ +h2 { + color: green; +} diff --git a/test/cases/integrity-publicPath-empty/src/vendor.js b/test/cases/integrity-publicPath-empty/src/vendor.js new file mode 100644 index 00000000..a4549a7e --- /dev/null +++ b/test/cases/integrity-publicPath-empty/src/vendor.js @@ -0,0 +1 @@ +console.log('>> vendor'); diff --git a/test/cases/integrity/webpack.config.js b/test/cases/integrity-publicPath-empty/webpack.config.js similarity index 96% rename from test/cases/integrity/webpack.config.js rename to test/cases/integrity-publicPath-empty/webpack.config.js index f087d30a..2099d72a 100644 --- a/test/cases/integrity/webpack.config.js +++ b/test/cases/integrity-publicPath-empty/webpack.config.js @@ -7,6 +7,7 @@ module.exports = { target: 'web', output: { + publicPath: '', // test empty path: path.join(__dirname, 'dist/'), crossOriginLoading: 'use-credentials', // required for test Subresource Integrity }, diff --git a/test/cases/integrity-publicPath-root/expected/assets/css/style.bundle.css b/test/cases/integrity-publicPath-root/expected/assets/css/style.bundle.css new file mode 100644 index 00000000..adc68fa6 --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/assets/css/style.bundle.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} diff --git a/test/cases/integrity-publicPath-root/expected/assets/css/vendor.bundle.css b/test/cases/integrity-publicPath-root/expected/assets/css/vendor.bundle.css new file mode 100644 index 00000000..ad4f3016 --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/assets/css/vendor.bundle.css @@ -0,0 +1,3 @@ +h2 { + color: green; +} diff --git a/test/cases/integrity-publicPath-root/expected/assets/img/image.697ef306.png b/test/cases/integrity-publicPath-root/expected/assets/img/image.697ef306.png new file mode 100644 index 0000000000000000000000000000000000000000..29d95462457487e7347780175d75d743c4f07642 GIT binary patch literal 1250 zcmV<81ReW{P)004pr0{{R3_H{EN0001KP)t-s_xJbq z_V)Gl_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}() z<>ch#32auvuF;-u{rG5l|fJ}NUM|Oz~kfXaf$tcfB?nL zax(0;KSv7dIZhhb4r5W5cUYt+9lNs%y!vxh^ahta!#g4uh` zMePFOf_r8$^drMEO4!C1EG{B=ZI&a`wBLr_A1NwWwsKlp;po(I`n(js3UXWG=)7IK zxHN(`fneDNyrmTYgmyOIg5Q1};e6W=)cr-U!wE`%Lip+sq`%aH(qCW}8@_c2NYY5%G{pTJfFok*lVK{`b7ODrh;{V?3NoKi5}pWr#IV7xye2SMpCPeJJ~XF=&N zCqZq0=>?^~JO!n{oCT%7ECr>%j2AR=-({wPFt?ny;KE6NnF=l)3zOg^I0;UIf281I z1VO;87j(}FE?jsqPYD9fcKa8zEuOn?hF;F}T>d*ug1#*P1z}pyJ|g&rqf==FuiYVb zjlq#ITmQSDIR&`@I&4Pf;J6b!n5ZCbA#8#A{~+~805?D zO^+ZhY~Zw9E9?`b#&J??jXi<{Xd0Jr!_ck`0^Ai8sQ%<+T$Ut$Q9-1)=3+gMj&INJ zrS82xsGP5x&B!!$We{|NfU@(5fd20RFa-dh5X_B9a1xvZC&5YZFK{PSsxrUwVE_OC M07*qoM6N<$g7<`XtpET3 literal 0 HcmV?d00001 diff --git a/test/cases/integrity-publicPath-root/expected/assets/js/main.bundle.js b/test/cases/integrity-publicPath-root/expected/assets/js/main.bundle.js new file mode 100644 index 00000000..1ce9c884 --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/assets/js/main.bundle.js @@ -0,0 +1 @@ +console.log(">> main"); \ No newline at end of file diff --git a/test/cases/integrity-publicPath-root/expected/assets/js/no-integrity.bundle.js b/test/cases/integrity-publicPath-root/expected/assets/js/no-integrity.bundle.js new file mode 100644 index 00000000..4fbdad65 --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/assets/js/no-integrity.bundle.js @@ -0,0 +1 @@ +console.log(">> ignore integrity"); \ No newline at end of file diff --git a/test/cases/integrity-publicPath-root/expected/assets/js/vendor.bundle.js b/test/cases/integrity-publicPath-root/expected/assets/js/vendor.bundle.js new file mode 100644 index 00000000..5615af0f --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/assets/js/vendor.bundle.js @@ -0,0 +1 @@ +console.log(">> vendor"); \ No newline at end of file diff --git a/test/cases/integrity-publicPath-root/expected/pages/index.html b/test/cases/integrity-publicPath-root/expected/pages/index.html new file mode 100644 index 00000000..a7666353 --- /dev/null +++ b/test/cases/integrity-publicPath-root/expected/pages/index.html @@ -0,0 +1,31 @@ + + + + Test + + + + + + + + + + + + + + + + + + + + + +

Hello World!

+ + + + + \ No newline at end of file diff --git a/test/cases/integrity-publicPath-root/src/image.png b/test/cases/integrity-publicPath-root/src/image.png new file mode 100644 index 0000000000000000000000000000000000000000..29d95462457487e7347780175d75d743c4f07642 GIT binary patch literal 1250 zcmV<81ReW{P)004pr0{{R3_H{EN0001KP)t-s_xJbq z_V)Gl_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}() z<>ch#32auvuF;-u{rG5l|fJ}NUM|Oz~kfXaf$tcfB?nL zax(0;KSv7dIZhhb4r5W5cUYt+9lNs%y!vxh^ahta!#g4uh` zMePFOf_r8$^drMEO4!C1EG{B=ZI&a`wBLr_A1NwWwsKlp;po(I`n(js3UXWG=)7IK zxHN(`fneDNyrmTYgmyOIg5Q1};e6W=)cr-U!wE`%Lip+sq`%aH(qCW}8@_c2NYY5%G{pTJfFok*lVK{`b7ODrh;{V?3NoKi5}pWr#IV7xye2SMpCPeJJ~XF=&N zCqZq0=>?^~JO!n{oCT%7ECr>%j2AR=-({wPFt?ny;KE6NnF=l)3zOg^I0;UIf281I z1VO;87j(}FE?jsqPYD9fcKa8zEuOn?hF;F}T>d*ug1#*P1z}pyJ|g&rqf==FuiYVb zjlq#ITmQSDIR&`@I&4Pf;J6b!n5ZCbA#8#A{~+~805?D zO^+ZhY~Zw9E9?`b#&J??jXi<{Xd0Jr!_ck`0^Ai8sQ%<+T$Ut$Q9-1)=3+gMj&INJ zrS82xsGP5x&B!!$We{|NfU@(5fd20RFa-dh5X_B9a1xvZC&5YZFK{PSsxrUwVE_OC M07*qoM6N<$g7<`XtpET3 literal 0 HcmV?d00001 diff --git a/test/cases/integrity-publicPath-root/src/index.html b/test/cases/integrity-publicPath-root/src/index.html new file mode 100644 index 00000000..9cfdace5 --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/index.html @@ -0,0 +1,31 @@ + + + + Test + + + + + + + + + + + + + + + + + + + + + +

Hello World!

+ + + + + \ No newline at end of file diff --git a/test/cases/integrity-publicPath-root/src/main.js b/test/cases/integrity-publicPath-root/src/main.js new file mode 100644 index 00000000..89ae7c12 --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/main.js @@ -0,0 +1 @@ +console.log('>> main'); diff --git a/test/cases/integrity-publicPath-root/src/no-integrity.js b/test/cases/integrity-publicPath-root/src/no-integrity.js new file mode 100644 index 00000000..a1316638 --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/no-integrity.js @@ -0,0 +1 @@ +console.log('>> ignore integrity'); diff --git a/test/cases/integrity-publicPath-root/src/style.css b/test/cases/integrity-publicPath-root/src/style.css new file mode 100644 index 00000000..adc68fa6 --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/style.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} diff --git a/test/cases/integrity-publicPath-root/src/vendor.css b/test/cases/integrity-publicPath-root/src/vendor.css new file mode 100644 index 00000000..ad4f3016 --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/vendor.css @@ -0,0 +1,3 @@ +h2 { + color: green; +} diff --git a/test/cases/integrity-publicPath-root/src/vendor.js b/test/cases/integrity-publicPath-root/src/vendor.js new file mode 100644 index 00000000..a4549a7e --- /dev/null +++ b/test/cases/integrity-publicPath-root/src/vendor.js @@ -0,0 +1 @@ +console.log('>> vendor'); diff --git a/test/cases/integrity-publicPath-root/webpack.config.js b/test/cases/integrity-publicPath-root/webpack.config.js new file mode 100644 index 00000000..f39d4d20 --- /dev/null +++ b/test/cases/integrity-publicPath-root/webpack.config.js @@ -0,0 +1,51 @@ +const path = require('path'); +const HtmlBundlerPlugin = require('../../../'); + +module.exports = { + //mode: 'development', + mode: 'production', + target: 'web', + + output: { + publicPath: '/', // test the root path + path: path.join(__dirname, 'dist/'), + crossOriginLoading: 'use-credentials', // required for test Subresource Integrity + }, + + plugins: [ + new HtmlBundlerPlugin({ + entry: { + //jquery: 'https://code.jquery.com/ui/1.13.2/jquery-ui.min.js', + //test: the relative asset file must be the same as pathname of `compilation.assets` + 'pages/index': './src/index.html', + }, + + js: { + filename: 'assets/js/[name].bundle.js', + }, + + css: { + filename: 'assets/css/[name].bundle.css', + }, + + integrity: true, // test the `true` value + }), + ], + + module: { + rules: [ + { + test: /\.css$/, + use: ['css-loader'], + }, + + { + test: /\.(png|jpe?g|ico|svg)$/, + type: 'asset/resource', + generator: { + filename: 'assets/img/[name].[hash:8][ext]', + }, + }, + ], + }, +}; diff --git a/test/integration.test.js b/test/integration.test.js index cb4dc4b7..ecd7e422 100644 --- a/test/integration.test.js +++ b/test/integration.test.js @@ -308,7 +308,10 @@ describe('special cases', () => { describe('integrity', () => { // TODO: implement and add tests for preload - test('attr in script and link tags', () => compareFiles('integrity')); + test('script, link, publicPath=""', () => compareFiles('integrity-publicPath-empty')); + test('script, link, publicPath="/"', () => compareFiles('integrity-publicPath-root')); + test('script, link, publicPath="auto"', () => compareFiles('integrity-publicPath-auto')); + test('split chunks', () => compareFiles('integrity-split-chunks')); test('import css', () => compareFiles('integrity-import-css-in-js')); test('import css, sourceMap', () => compareFiles('integrity-import-css-in-js-source-map'));