diff --git a/src/extractLoader.js b/src/extractLoader.js index 947ed37..741bccf 100644 --- a/src/extractLoader.js +++ b/src/extractLoader.js @@ -172,7 +172,9 @@ function evalDependencyGraph({loaderContext, src, filename, publicPath = ""}) { const extractedContent = extractedDependencyContent.reduce((content, dependencyContent, idx) => { const pattern = new RegExp(newDependencies[idx].rndPlaceholder, "g"); - return content.replace(pattern, dependencyContent); + // should be callback because dep text could contain $' + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace + return content.replace(pattern, () => dependencyContent); }, contentWithPlaceholders); moduleCache.set(filename, extractedContent); diff --git a/test/extractLoader.test.js b/test/extractLoader.test.js index 4bad1a9..b09a648 100644 --- a/test/extractLoader.test.js +++ b/test/extractLoader.test.js @@ -19,7 +19,14 @@ describe("extractLoader", () => { const simpleJs = path.resolve(__dirname, "dist/simple-dist.js"); expect(simpleJs).to.be.a.file(); - expect(simpleJs).to.have.content("hello"); + expect(simpleJs).to.have.content("hello$'"); + })); + it("should extract require with dollar sign correctly", () => + compile({testModule: "require-dollar-sign.js"}).then(() => { + const simpleJs = path.resolve(__dirname, "dist/require-dollar-sign-dist.js"); + + expect(simpleJs).to.be.a.file(); + expect(simpleJs).to.have.content("first hello$' last"); })); it("should extract resource with query params into simple-css-with-query-param.js", () => compile({testModule: "simple-css-with-query-params.js"}).then(() => { diff --git a/test/modules/require-dollar-sign.js b/test/modules/require-dollar-sign.js new file mode 100644 index 0000000..b33bcb8 --- /dev/null +++ b/test/modules/require-dollar-sign.js @@ -0,0 +1,2 @@ +/* eslint-disable import/unambiguous */ +module.exports = "first " + require("./simple.js") + " last"; diff --git a/test/modules/simple.js b/test/modules/simple.js index 35fef2e..06a8f13 100644 --- a/test/modules/simple.js +++ b/test/modules/simple.js @@ -1,2 +1,2 @@ /* eslint-disable import/unambiguous */ -module.exports = "hello"; +module.exports = "hello$'";