diff --git a/packages/building-rollup/demo/mpa/homepage-side-effect.js b/packages/building-rollup/demo/mpa/homepage-side-effect.js
new file mode 100644
index 00000000..42e9b3a3
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/homepage-side-effect.js
@@ -0,0 +1,3 @@
+import './js/homepage-side-effect-dep.js';
+
+window.__homepageSideEffectMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/homepage.js b/packages/building-rollup/demo/mpa/homepage.js
new file mode 100644
index 00000000..4eddb3da
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/homepage.js
@@ -0,0 +1,2 @@
+export { homepageDepMetaUrl } from './js/homepage-dep.js';
+export const homepageMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/index.html b/packages/building-rollup/demo/mpa/index.html
new file mode 100644
index 00000000..bf7c53ac
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/index.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+ My Demo
+
+
+
+ Static content in index.html is preserved
+
+ SubPage
+
+
+
+
+
+
+
+
diff --git a/packages/building-rollup/demo/mpa/js/homepage-dep.js b/packages/building-rollup/demo/mpa/js/homepage-dep.js
new file mode 100644
index 00000000..7b1bf787
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/js/homepage-dep.js
@@ -0,0 +1 @@
+export const homepageDepMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/js/homepage-side-effect-dep.js b/packages/building-rollup/demo/mpa/js/homepage-side-effect-dep.js
new file mode 100644
index 00000000..a1a95eeb
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/js/homepage-side-effect-dep.js
@@ -0,0 +1 @@
+window.__homepageSideEffectDepMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/js/subpage-dep.js b/packages/building-rollup/demo/mpa/js/subpage-dep.js
new file mode 100644
index 00000000..c9e67ec2
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/js/subpage-dep.js
@@ -0,0 +1 @@
+export const subpageDepMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/js/subpage-side-effect-dep.js b/packages/building-rollup/demo/mpa/js/subpage-side-effect-dep.js
new file mode 100644
index 00000000..e20cecd3
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/js/subpage-side-effect-dep.js
@@ -0,0 +1 @@
+window.__subpageSideEffectDepMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/navigation.js b/packages/building-rollup/demo/mpa/navigation.js
new file mode 100644
index 00000000..81aa9e43
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/navigation.js
@@ -0,0 +1 @@
+export const navigationMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/rollup.mpa.config.js b/packages/building-rollup/demo/mpa/rollup.mpa.config.js
new file mode 100644
index 00000000..d611420c
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/rollup.mpa.config.js
@@ -0,0 +1,12 @@
+const merge = require('deepmerge');
+const { createMpaConfig } = require('../../index.js');
+
+const baseConfig = createMpaConfig({
+ developmentMode: true,
+ injectServiceWorker: true,
+ rootDir: 'demo/mpa',
+});
+
+module.exports = merge(baseConfig, {
+ input: '**/*.html',
+});
diff --git a/packages/building-rollup/demo/mpa/subpage/index.html b/packages/building-rollup/demo/mpa/subpage/index.html
new file mode 100644
index 00000000..412448ed
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/subpage/index.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+ My Demo Subpage
+
+
+
+ Static content in subpage/index.html is preserved
+
+
+
+
+
+
+
+
diff --git a/packages/building-rollup/demo/mpa/subpage/subpage-side-effect.js b/packages/building-rollup/demo/mpa/subpage/subpage-side-effect.js
new file mode 100644
index 00000000..50121c5c
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/subpage/subpage-side-effect.js
@@ -0,0 +1,3 @@
+import '../js/subpage-side-effect-dep.js';
+
+window.__subpageSideEffectMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/demo/mpa/subpage/subpage.js b/packages/building-rollup/demo/mpa/subpage/subpage.js
new file mode 100644
index 00000000..b0f91a81
--- /dev/null
+++ b/packages/building-rollup/demo/mpa/subpage/subpage.js
@@ -0,0 +1,2 @@
+export { subpageDepMetaUrl } from '../js/subpage-dep.js';
+export const subpageMetaUrl = import.meta.url;
diff --git a/packages/building-rollup/index.js b/packages/building-rollup/index.js
index 1e771956..474fceed 100644
--- a/packages/building-rollup/index.js
+++ b/packages/building-rollup/index.js
@@ -5,5 +5,6 @@
const { createBasicConfig } = require('./src/createBasicConfig');
const { createSpaConfig } = require('./src/createSpaConfig');
+const { createMpaConfig } = require('./src/createMpaConfig');
-module.exports = { createBasicConfig, createSpaConfig };
+module.exports = { createBasicConfig, createSpaConfig, createMpaConfig };
diff --git a/packages/building-rollup/package.json b/packages/building-rollup/package.json
index 75f59499..4f16b535 100644
--- a/packages/building-rollup/package.json
+++ b/packages/building-rollup/package.json
@@ -19,16 +19,18 @@
"build:basic": "rimraf dist && rollup -c demo/js/rollup.basic.config.js",
"build:cjs": "rimraf dist && rollup -c demo/cjs/rollup.spa.config.js",
"build:modify-babel-plugin": "rimraf dist && rollup -c demo/modify-babel-plugin/rollup.config.js",
+ "build:mpa": "rimraf dist && rollup -c demo/mpa/rollup.mpa.config.js",
"build:spa": "rimraf dist && rollup -c demo/js/rollup.spa.config.js",
"build:spa-js-input": "rimraf dist && rollup -c demo/js/rollup.spa-js-input.config.js",
"build:spa-nomodule": "rimraf dist && rollup -c demo/js/rollup.spa-nomodule.config.js",
"build:ts": "rimraf dist && rollup -c demo/ts/rollup.spa.config.js",
"prepublishOnly": "../../scripts/insert-header.js",
"start:babelrc": "npm run build:babelrc && npm run start:build",
- "start:build": "es-dev-server --root-dir dist --compatibility none --open",
+ "start:build": "node ../es-dev-server/dist/cli.js --root-dir dist --compatibility none --open",
"start:cjs": "npm run build:cjs && npm run start:build",
- "start:demo": "es-dev-server --app-index demo/js/index.html --open --compatibility none",
+ "start:demo": "node ../es-dev-server/dist/cli.js --app-index demo/js/index.html --open --compatibility none",
"start:modify-babel-plugin": "npm run build:modify-babel-plugin && npm run start:build",
+ "start:mpa": "npm run build:mpa && npm run start:build",
"start:spa": "npm run build:spa && npm run start:build",
"start:spa-js-input": "npm run build:spa-js-input && npm run start:build",
"start:spa-nomodule": "npm run build:spa-nomodule && npm run start:build",
diff --git a/packages/building-rollup/src/babel/babel-configs.js b/packages/building-rollup/src/babel/babel-configs.js
index 026c1cdd..66bcd243 100644
--- a/packages/building-rollup/src/babel/babel-configs.js
+++ b/packages/building-rollup/src/babel/babel-configs.js
@@ -1,7 +1,7 @@
const { babelPluginBundledHelpers } = require('./babel-plugin-bundled-helpers');
const { isFalsy } = require('../utils');
-const createBabelConfigRollupBuild = developmentMode => ({
+const createBabelConfigRollupBuild = ({ developmentMode, rootDir }) => ({
babelHelpers: 'bundled',
compact: true,
plugins: [
@@ -11,7 +11,7 @@ const createBabelConfigRollupBuild = developmentMode => ({
// plugins that aren't part of @babel/preset-env should be applied regularly in
// the rollup build phase
- require.resolve('babel-plugin-bundled-import-meta'),
+ [require.resolve('babel-plugin-bundled-import-meta'), { bundleDir: rootDir }],
!developmentMode && [
require.resolve('babel-plugin-template-html-minifier'),
{
diff --git a/packages/building-rollup/src/createBasicConfig.js b/packages/building-rollup/src/createBasicConfig.js
index 059b571f..37edaf2b 100644
--- a/packages/building-rollup/src/createBasicConfig.js
+++ b/packages/building-rollup/src/createBasicConfig.js
@@ -28,7 +28,7 @@ function createBasicConfig(userOptions = {}) {
},
userOptions,
);
- const { developmentMode } = userOptions;
+ const { developmentMode, rootDir } = userOptions;
const fileName = `[${developmentMode ? 'name' : 'hash'}].js`;
const assetName = `[${developmentMode ? 'name' : 'hash'}][extname]`;
@@ -60,7 +60,11 @@ function createBasicConfig(userOptions = {}) {
// build non-standard syntax to standard syntax and other babel optimization plugins
// user plugins are deduped to allow overriding
- dedupedBabelPlugin(babel, opts.babel, createBabelConfigRollupBuild(developmentMode)),
+ dedupedBabelPlugin(
+ babel,
+ opts.babel,
+ createBabelConfigRollupBuild({ developmentMode, rootDir }),
+ ),
// minify js code
!developmentMode && pluginWithOptions(terser, opts.terser, { output: { comments: false } }),
diff --git a/packages/building-rollup/src/createMpaConfig.js b/packages/building-rollup/src/createMpaConfig.js
new file mode 100644
index 00000000..63ec934e
--- /dev/null
+++ b/packages/building-rollup/src/createMpaConfig.js
@@ -0,0 +1,20 @@
+/* eslint-disable */
+/** @typedef {import('./types').MpaOptions} MpaOptions */
+
+const merge = require('deepmerge');
+const { createSpaConfig } = require('./createSpaConfig.js');
+
+/**
+ * @param {MpaOptions} options
+ */
+function createMpaConfig(options) {
+ const userOptions = merge(
+ {
+ html: { flatten: false },
+ },
+ options,
+ );
+ return createSpaConfig(userOptions);
+}
+
+module.exports = { createMpaConfig };
diff --git a/packages/building-rollup/src/createSpaConfig.js b/packages/building-rollup/src/createSpaConfig.js
index 00632641..b94cd0f0 100644
--- a/packages/building-rollup/src/createSpaConfig.js
+++ b/packages/building-rollup/src/createSpaConfig.js
@@ -8,12 +8,7 @@ const polyfillsLoader = require('@open-wc/rollup-plugin-polyfills-loader');
const path = require('path');
const { generateSW } = require('rollup-plugin-workbox');
const { createBasicConfig } = require('./createBasicConfig');
-const {
- pluginWithOptions,
- applyServiceWorkerRegistration,
- isFalsy,
- createSwPath,
-} = require('./utils');
+const { pluginWithOptions, applyServiceWorkerRegistration, isFalsy } = require('./utils');
const { defaultPolyfills } = require('./polyfills');
/**
@@ -34,8 +29,19 @@ function createSpaConfig(options) {
);
let outputDir = basicConfig.output.dir;
- const swPath = createSwPath(userOptions, outputDir);
- const applySw = htmlString => applyServiceWorkerRegistration(htmlString, swPath);
+ if (userOptions.rootDir) {
+ if (typeof userOptions.html === 'boolean' && userOptions.html) {
+ userOptions.html = {
+ rootDir: userOptions.rootDir,
+ };
+ }
+ if (typeof userOptions.html === 'object') {
+ userOptions.html.rootDir = userOptions.rootDir;
+ }
+ }
+
+ const applySw = (htmlString, transformOptions) =>
+ applyServiceWorkerRegistration(htmlString, transformOptions, userOptions, outputDir);
const htmlPlugin = pluginWithOptions(html, userOptions.html, {
minify: !userOptions.developmentMode,
diff --git a/packages/building-rollup/src/types.d.ts b/packages/building-rollup/src/types.d.ts
index 9605d24d..c7407080 100644
--- a/packages/building-rollup/src/types.d.ts
+++ b/packages/building-rollup/src/types.d.ts
@@ -1,3 +1,5 @@
+import { PluginOptions } from '@open-wc/rollup-plugin-html';
+
export interface BasicOptions {
outputDir?: string;
nodeResolve?: boolean | object;
@@ -5,16 +7,19 @@ export interface BasicOptions {
terser?: boolean | object;
legacyBuild?: boolean;
developmentMode?: boolean;
+ rootDir?: string;
}
export interface SpaOptions extends BasicOptions {
- html?: boolean | object;
+ html?: boolean | PluginOptions;
polyfillsLoader?: boolean | object;
workbox?: boolean | WorkboxOptions;
injectServiceWorker?: boolean;
}
+export interface MpaOptions extends SpaOptions {}
+
interface WorkboxOptions {
- swDest?: string,
- globDirectory?: string,
-}
\ No newline at end of file
+ swDest?: string;
+ globDirectory?: string;
+}
diff --git a/packages/building-rollup/src/utils.js b/packages/building-rollup/src/utils.js
index 2360308f..069dcb04 100644
--- a/packages/building-rollup/src/utils.js
+++ b/packages/building-rollup/src/utils.js
@@ -1,6 +1,7 @@
/** @typedef {import('./types').SpaOptions} SpaOptions */
const merge = require('deepmerge');
+const path = require('path');
const { createScript } = require('@open-wc/building-utils');
const { parse, serialize } = require('parse5');
const { append, predicates, query } = require('@open-wc/building-utils/dom5-fork');
@@ -39,11 +40,30 @@ function pluginWithOptions(plugin, userConfig, defaultConfig, ...otherParams) {
return plugin(config, ...otherParams);
}
+/**
+ *
+ * @param {SpaOptions} userOptions
+ * @param {string} outputDir
+ * @param {string} htmlFileName
+ */
+function createSwPath(userOptions, outputDir, htmlFileName) {
+ let swPath;
+ if (typeof userOptions.workbox === 'object' && userOptions.workbox.swDest) {
+ swPath = userOptions.workbox.swDest.replace(`${outputDir}/`, '');
+ } else {
+ swPath = './sw.js';
+ }
+
+ swPath = path.relative(path.dirname(htmlFileName), swPath);
+ return swPath;
+}
+
/**
* @param {string} htmlString
* @returns {string}
*/
-function applyServiceWorkerRegistration(htmlString, swPath) {
+function applyServiceWorkerRegistration(htmlString, transformOptions, userOptions, outputDir) {
+ const swPath = createSwPath(userOptions, outputDir, transformOptions.htmlFileName);
const documentAst = parse(htmlString);
const body = query(documentAst, predicates.hasTagName('body'));
const swRegistration = createScript(
@@ -68,21 +88,6 @@ function applyServiceWorkerRegistration(htmlString, swPath) {
return serialize(documentAst);
}
-/**
- *
- * @param {SpaOptions} userOptions
- * @param {string} outputDir
- */
-function createSwPath(userOptions, outputDir) {
- let swPath;
- if (typeof userOptions.workbox === 'object' && userOptions.workbox.swDest) {
- swPath = userOptions.workbox.swDest.replace(`${outputDir}/`, '');
- } else {
- swPath = './sw.js';
- }
- return swPath;
-}
-
module.exports = {
isFalsy,
pluginWithOptions,
diff --git a/packages/building-rollup/test/mpa-integration.test.js b/packages/building-rollup/test/mpa-integration.test.js
new file mode 100644
index 00000000..cfde7a2d
--- /dev/null
+++ b/packages/building-rollup/test/mpa-integration.test.js
@@ -0,0 +1,96 @@
+/* eslint-disable global-require, import/no-dynamic-require */
+const puppeteer = require('puppeteer');
+const { expect } = require('chai');
+const path = require('path');
+const fs = require('fs');
+const rimraf = require('rimraf');
+const { rollup } = require('rollup');
+const { startServer, createConfig } = require('es-dev-server');
+
+const rootDir = path.resolve(__dirname, '..', 'dist');
+
+describe('integration tests', () => {
+ let server;
+ let serverConfig;
+ /** @type {import('puppeteer').Browser} */
+ let browser;
+
+ before(async () => {
+ serverConfig = createConfig({
+ port: 8081,
+ rootDir,
+ });
+
+ ({ server } = await startServer(serverConfig));
+ browser = await puppeteer.launch();
+ rimraf.sync(rootDir);
+ });
+
+ after(async () => {
+ await browser.close();
+ await new Promise(resolve =>
+ server.close(() => {
+ resolve();
+ }),
+ );
+ });
+
+ describe(`Mpa Config`, function describe() {
+ this.timeout(10000);
+ let page;
+
+ before(async () => {
+ rimraf.sync(rootDir);
+ const configPath = path.join(__dirname, '..', 'demo', 'mpa', 'rollup.mpa.config.js');
+ const config = require(configPath);
+ const bundle = await rollup(config);
+ if (Array.isArray(config.output)) {
+ await Promise.all([bundle.write(config.output[0]), bundle.write(config.output[1])]);
+ } else {
+ await bundle.write(config.output);
+ }
+
+ page = await browser.newPage();
+ });
+
+ after(() => {
+ rimraf.sync(rootDir);
+ });
+
+ it('passes the in-browser tests for index.html', async () => {
+ await page.goto('http://localhost:8081/', {
+ waitUntil: 'networkidle0',
+ });
+ // @ts-ignore
+ const browserTests = await page.evaluate(() => window.__tests);
+ expect(browserTests).to.eql({
+ homepageMetaUrl: 'http://localhost:8081/homepage.js',
+ homepageDepMetaUrl: 'http://localhost:8081/js/homepage-dep.js',
+ __homepageSideEffectMetaUrl: 'http://localhost:8081/homepage-side-effect.js',
+ __homepageSideEffectDepMetaUrl: 'http://localhost:8081/js/homepage-side-effect-dep.js',
+ navigationMetaUrl: 'http://localhost:8081/navigation.js',
+ serviceWorkerScriptUrl: 'sw.js',
+ });
+ });
+
+ it('passes the in-browser tests for subpage/index.html', async () => {
+ await page.goto('http://localhost:8081/subpage/', {
+ waitUntil: 'networkidle0',
+ });
+ // @ts-ignore
+ const browserTests = await page.evaluate(() => window.__tests);
+ expect(browserTests).to.eql({
+ subpageMetaUrl: 'http://localhost:8081/subpage/subpage.js',
+ subpageDepMetaUrl: 'http://localhost:8081/js/subpage-dep.js',
+ __subpageSideEffectMetaUrl: 'http://localhost:8081/subpage/subpage-side-effect.js',
+ __subpageSideEffectDepMetaUrl: 'http://localhost:8081/js/subpage-side-effect-dep.js',
+ navigationMetaUrl: 'http://localhost:8081/navigation.js',
+ serviceWorkerScriptUrl: '../sw.js',
+ });
+ });
+
+ it('outputs a service worker', () => {
+ expect(fs.existsSync(path.join(rootDir, 'sw.js'))).to.be.true;
+ });
+ });
+});
diff --git a/packages/building-rollup/test/unit.test.js b/packages/building-rollup/test/unit.test.js
index def1b611..cd82485b 100644
--- a/packages/building-rollup/test/unit.test.js
+++ b/packages/building-rollup/test/unit.test.js
@@ -13,11 +13,12 @@ describe('createSwPath', () => {
},
},
'dist',
+ 'index.html',
),
- ).to.equal('./foo.js');
+ ).to.equal('foo.js');
});
- it('uses "./sw.js" as swPath if no swDest is provided by the workbox config', () => {
+ it('uses "sw.js" as swPath if no swDest is provided by the workbox config', () => {
expect(
createSwPath(
{
@@ -26,26 +27,29 @@ describe('createSwPath', () => {
},
},
'dist',
+ 'index.html',
),
- ).to.equal('./sw.js');
+ ).to.equal('sw.js');
});
- it('returns "./sw.js" as swPath if the workbox property is a boolean', () => {
+ it('returns "sw.js" as swPath if the workbox property is a boolean', () => {
expect(
createSwPath(
{
workbox: true,
},
'dist',
+ 'index.html',
),
- ).to.equal('./sw.js');
+ ).to.equal('sw.js');
expect(
createSwPath(
{
workbox: false,
},
'dist',
+ 'index.html',
),
- ).to.equal('./sw.js');
+ ).to.equal('sw.js');
});
});
diff --git a/packages/create/test/snapshots/fully-loaded-app/package.json b/packages/create/test/snapshots/fully-loaded-app/package.json
index efef51fd..6313b14f 100644
--- a/packages/create/test/snapshots/fully-loaded-app/package.json
+++ b/packages/create/test/snapshots/fully-loaded-app/package.json
@@ -61,4 +61,4 @@
"lit-html": "^1.0.0",
"lit-element": "^2.0.1"
}
-}
+}
\ No newline at end of file
diff --git a/packages/rollup-plugin-html/rollup-plugin-html.js b/packages/rollup-plugin-html/rollup-plugin-html.js
index bd29598c..71dc20e9 100644
--- a/packages/rollup-plugin-html/rollup-plugin-html.js
+++ b/packages/rollup-plugin-html/rollup-plugin-html.js
@@ -24,6 +24,15 @@ const { createHtmlAsset, createHtmlAssets } = require('./src/createHtmlAssets');
const watchMode = process.env.ROLLUP_WATCH === 'true';
const defaultFileName = 'index.html';
+/**
+ * @param {string} id
+ * @param {string} rootDir
+ * @return {boolean}
+ */
+function isAbsoluteUrl(id, rootDir) {
+ return id.startsWith('/') && !id.startsWith(rootDir);
+}
+
/**
* @param {PluginOptions} pluginOptions
* @returns {RollupPluginHtml}
@@ -128,6 +137,9 @@ function rollupPluginHtml(pluginOptions) {
},
resolveId(id) {
+ if (pluginOptions.rootDir && isAbsoluteUrl(id, pluginOptions.rootDir)) {
+ return path.join(pluginOptions.rootDir, id);
+ }
for (const file of htmlFiles) {
if (file.inlineModules && file.inlineModules.has(id)) {
return id;
diff --git a/packages/rollup-plugin-html/src/createHtmlAssets.js b/packages/rollup-plugin-html/src/createHtmlAssets.js
index 5a98e9c5..7739d14e 100644
--- a/packages/rollup-plugin-html/src/createHtmlAssets.js
+++ b/packages/rollup-plugin-html/src/createHtmlAssets.js
@@ -39,6 +39,7 @@ async function createHtmlAsset(
entrypointBundles,
html,
externalTransformFns,
+ htmlFileName,
});
return {
fileName: htmlFileName,
diff --git a/packages/rollup-plugin-html/src/getEntrypointBundles.js b/packages/rollup-plugin-html/src/getEntrypointBundles.js
index ba92cde9..40f3cd67 100644
--- a/packages/rollup-plugin-html/src/getEntrypointBundles.js
+++ b/packages/rollup-plugin-html/src/getEntrypointBundles.js
@@ -39,7 +39,7 @@ function createImportPath({ publicPath, mainOutputDir, fileOutputDir, htmlFileNa
* @param {PluginOptions} args.pluginOptions
* @param {GeneratedBundle[]} args.generatedBundles
* @param {string} args.mainOutputDir
- * @param {string} args.htmlFileName
+ * @param {string | undefined} [args.htmlFileName]
* @param {string[] | undefined} [args.inputModuleIds]
*/
function getEntrypointBundles({
diff --git a/packages/rollup-plugin-html/src/getOutputHtml.js b/packages/rollup-plugin-html/src/getOutputHtml.js
index 7a9c88c4..43a06483 100644
--- a/packages/rollup-plugin-html/src/getOutputHtml.js
+++ b/packages/rollup-plugin-html/src/getOutputHtml.js
@@ -15,8 +15,15 @@ const defaultHtml = '} args.entrypointBundles
* @param {TransformFunction[]} [args.externalTransformFns]
* @param {string | undefined} [args.html]
+ * @param {string | undefined} [args.htmlFileName]
*/
-async function getOutputHtml({ pluginOptions, entrypointBundles, externalTransformFns, html }) {
+async function getOutputHtml({
+ pluginOptions,
+ entrypointBundles,
+ externalTransformFns,
+ html,
+ htmlFileName,
+}) {
const { template, inject, minify } = pluginOptions;
let outputHtml;
@@ -55,6 +62,7 @@ async function getOutputHtml({ pluginOptions, entrypointBundles, externalTransfo
outputHtml = await transform(outputHtml, {
bundle: defaultBundle,
bundles: multiBundles,
+ htmlFileName,
});
}
diff --git a/packages/rollup-plugin-html/src/types.d.ts b/packages/rollup-plugin-html/src/types.d.ts
index 01113eb5..f364b5bf 100644
--- a/packages/rollup-plugin-html/src/types.d.ts
+++ b/packages/rollup-plugin-html/src/types.d.ts
@@ -25,6 +25,7 @@ export interface PluginOptions {
inputHtml?: string;
/** @deprecated use files instead */
inputPath?: string;
+ htmlFileName?: string;
}
export type MinifyFunction = (html: string) => string | Promise;
@@ -68,6 +69,7 @@ export interface TransformArgs {
bundle: EntrypointBundle;
// see TemplateArgs
bundles: Record;
+ htmlFileName: string;
}
export type TransformFunction = (html: string, args: TransformArgs) => string | Promise;
diff --git a/packages/rollup-plugin-polyfills-loader/rollup-plugin-polyfills-loader.js b/packages/rollup-plugin-polyfills-loader/rollup-plugin-polyfills-loader.js
index afb34dda..3d546783 100644
--- a/packages/rollup-plugin-polyfills-loader/rollup-plugin-polyfills-loader.js
+++ b/packages/rollup-plugin-polyfills-loader/rollup-plugin-polyfills-loader.js
@@ -7,6 +7,7 @@
/** @typedef {import('polyfills-loader').GeneratedFile} GeneratedFile */
/** @typedef {import('./src/types').PluginOptions} PluginOptions */
+const path = require('path');
const { injectPolyfillsLoader } = require('polyfills-loader');
const { createError, shouldInjectLoader } = require('./src/utils');
const { createPolyfillsLoaderConfig } = require('./src/createPolyfillsLoaderConfig');
@@ -72,7 +73,12 @@ function rollupPluginPolyfillsLoader(pluginOptions = {}) {
let preloaded = [];
for (const entrypoint of entrypoints) {
preloaded.push(entrypoint.importPath);
- preloaded.push(...entrypoint.chunk.imports);
+
+ // js files (incl. chunks) will always be in the root directory
+ const pathToRoot = path.posix.relative('./', path.posix.dirname(entrypoint.importPath));
+ for (const chunkPath of entrypoint.chunk.imports) {
+ preloaded.push(path.posix.join(pathToRoot, chunkPath));
+ }
}
preloaded = [...new Set(preloaded)];