Skip to content

Commit

Permalink
fix: error when using function in webpack output.publicPath
Browse files Browse the repository at this point in the history
  • Loading branch information
roland-reed committed Nov 30, 2021
1 parent e8c08a1 commit c568970
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ export function pitch(request) {

if (publicPath === "auto") {
publicPath = AUTO_PUBLIC_PATH;
} else if (typeof publicPath === "function") {
// `hash` property is not available in this context, Webpack itself just set `hash` with
// an arbitrary value.
// See: https://github.com/webpack/webpack/blob/main/lib/runtime/PublicPathRuntimeModule.js#L19-L27
publicPath = publicPath({ hash: 'XXXX' });
}

if (
Expand Down
19 changes: 19 additions & 0 deletions test/__snapshots__/public-path.test.js.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`public path should work with function output.publicPath: DOM 1`] = `
"<!DOCTYPE html><html><head>
<title>style-loader test</title>
<style id=\\"existing-style\\">.existing { color: yellow }</style>
</head>
<body>
<h1>Body</h1>
<div class=\\"target\\"></div>
<iframe class=\\"iframeTarget\\"></iframe>
</body></html>"
`;
exports[`public path should work with function output.publicPath: errors 1`] = `Array []`;
exports[`public path should work with function output.publicPath: warnings 1`] = `Array []`;
41 changes: 41 additions & 0 deletions test/public-path.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* eslint-env browser */
import path from "path";

import MiniCssExtractPlugin from "../src/cjs";

import {
compile,
getCompiler,
getErrors,
getWarnings,
runInJsDom,
} from "./helpers/index";

describe("public path", () => {
it("should work with function output.publicPath", async () => {
const compiler = getCompiler(
"simple.js",
{},
{
output: {
publicPath() { return "" },
path: path.resolve(__dirname, "../outputs"),
filename: "[name].bundle.js",
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].css",
}),
],
}
);
const stats = await compile(compiler);

runInJsDom("main.bundle.js", compiler, stats, (dom, bundle) => {
expect(dom.serialize()).toMatchSnapshot("DOM");
});

expect(getWarnings(stats)).toMatchSnapshot("warnings");
expect(getErrors(stats)).toMatchSnapshot("errors");
});
});

0 comments on commit c568970

Please sign in to comment.