diff --git a/.changeset/good-bats-flash.md b/.changeset/good-bats-flash.md
new file mode 100644
index 000000000..5330f58e2
--- /dev/null
+++ b/.changeset/good-bats-flash.md
@@ -0,0 +1,6 @@
+---
+'@web/rollup-plugin-polyfills-loader': patch
+'@web/rollup-plugin-html': patch
+---
+
+fix: keep order of script tags
diff --git a/.gitignore b/.gitignore
index 1d8925996..9a441e2a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
## editors
/.idea
/.vscode
+*~
# @11ty/eleventy-cache-assets
.cache
@@ -29,6 +30,7 @@ dist-types
.wireit
/dist
/packages/*/dist
+/packages/*/demo/dist
tsconfig.tsbuildinfo
_site
_site-dev
diff --git a/packages/rollup-plugin-html/demo/mpa/index.html b/packages/rollup-plugin-html/demo/mpa/index.html
index b423b4535..8f7662add 100644
--- a/packages/rollup-plugin-html/demo/mpa/index.html
+++ b/packages/rollup-plugin-html/demo/mpa/index.html
@@ -9,10 +9,10 @@
Index
- B
+ B
- C
+ C
-
\ No newline at end of file
+
diff --git a/packages/rollup-plugin-html/demo/mpa/pages/page-a.html b/packages/rollup-plugin-html/demo/mpa/pages/page-a.html
index 730a6fd5f..5e16ae885 100644
--- a/packages/rollup-plugin-html/demo/mpa/pages/page-a.html
+++ b/packages/rollup-plugin-html/demo/mpa/pages/page-a.html
@@ -9,11 +9,11 @@ Page A
- B
+ B
- C
+ C
diff --git a/packages/rollup-plugin-html/demo/mpa/pages/page-b.html b/packages/rollup-plugin-html/demo/mpa/pages/page-b.html
index 2a2448cbb..8d713f380 100644
--- a/packages/rollup-plugin-html/demo/mpa/pages/page-b.html
+++ b/packages/rollup-plugin-html/demo/mpa/pages/page-b.html
@@ -9,11 +9,11 @@ Page B
- B
+ B
- C
+ C
diff --git a/packages/rollup-plugin-html/demo/mpa/pages/page-c.html b/packages/rollup-plugin-html/demo/mpa/pages/page-c.html
index 13ce6a160..1244cccb5 100644
--- a/packages/rollup-plugin-html/demo/mpa/pages/page-c.html
+++ b/packages/rollup-plugin-html/demo/mpa/pages/page-c.html
@@ -9,11 +9,11 @@ Page C
- B
+ B
- C
+ C
diff --git a/packages/rollup-plugin-html/src/input/extract/extractModules.ts b/packages/rollup-plugin-html/src/input/extract/extractModules.ts
index aec82e009..1c34f40ab 100644
--- a/packages/rollup-plugin-html/src/input/extract/extractModules.ts
+++ b/packages/rollup-plugin-html/src/input/extract/extractModules.ts
@@ -59,6 +59,10 @@ export function extractModules(params: ExtractModulesParams) {
attributes,
code,
});
+ moduleImports.push({
+ importPath,
+ attributes,
+ });
}
remove(scriptNode);
} else {
diff --git a/packages/rollup-plugin-html/src/input/getInputData.ts b/packages/rollup-plugin-html/src/input/getInputData.ts
index 25d3a02e6..1371994e6 100644
--- a/packages/rollup-plugin-html/src/input/getInputData.ts
+++ b/packages/rollup-plugin-html/src/input/getInputData.ts
@@ -49,7 +49,7 @@ function createInputData(params: CreateInputDataParams): InputData {
html: result.htmlWithoutModules,
name,
inlineModules: result.inlineModules,
- moduleImports: [...result.moduleImports, ...result.inlineModules],
+ moduleImports: result.moduleImports,
assets: result.assets,
filePath,
};
diff --git a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts
index 12c1bbb5c..1afd99241 100644
--- a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts
+++ b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts
@@ -53,6 +53,10 @@ interface Entrypoint {
attributes?: Attribute[];
}
+interface EntrypointsUnsorted {
+ [key: string]: Entrypoint;
+}
+
export function getEntrypointBundles(params: GetEntrypointBundlesParams) {
const { pluginOptions, generatedBundles, inputModuleIds, outputDir, htmlFileName } = params;
const entrypointBundles: Record = {};
@@ -63,6 +67,7 @@ export function getEntrypointBundles(params: GetEntrypointBundlesParams) {
}
const entrypoints: Entrypoint[] = [];
+ const entrypointsUnsorted: EntrypointsUnsorted = {};
for (const chunkOrAsset of Object.values(bundle)) {
if (chunkOrAsset.type === 'chunk') {
const chunk = chunkOrAsset;
@@ -76,11 +81,21 @@ export function getEntrypointBundles(params: GetEntrypointBundlesParams) {
htmlFileName,
fileName: chunkOrAsset.fileName,
});
- entrypoints.push({ importPath, chunk: chunkOrAsset, attributes: found.attributes });
+ entrypointsUnsorted[chunk.facadeModuleId] = {
+ importPath,
+ chunk: chunkOrAsset,
+ attributes: found.attributes,
+ };
}
}
}
}
+
+ for (const mod of inputModuleIds) {
+ if (!entrypointsUnsorted[mod.importPath]) continue;
+ entrypoints.push(entrypointsUnsorted[mod.importPath]);
+ }
+
entrypointBundles[name] = { name, options, bundle, entrypoints };
}
diff --git a/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts b/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts
index 5a2250b62..f04993250 100644
--- a/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts
+++ b/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts
@@ -195,6 +195,36 @@ describe('rollup-plugin-html', () => {
);
});
+ it('resolves modules in original order', async () => {
+ const config = {
+ plugins: [
+ rollupPluginHTML({
+ rootDir,
+ input: {
+ name: 'index.html',
+ html:
+ 'Hello world ' +
+ '' +
+ '',
+ },
+ }),
+ ],
+ };
+
+ const bundle = await rollup(config);
+ const { output } = await bundle.generate(outputConfig);
+ expect(output.length).to.equal(4);
+ const hash = '5ec680a4efbb48ae254268ab1defe610';
+ const { code: appCode } = getChunk(output, `inline-module-${hash}.js`);
+ expect(appCode).to.include("console.log('entrypoint-a.js');");
+ expect(stripNewlines(getAsset(output, 'index.html').source)).to.equal(
+ 'Hello world ' +
+ `` +
+ '' +
+ '',
+ );
+ });
+
it('resolves inline module imports relative to the HTML file', async () => {
const config = {
plugins: [
diff --git a/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts b/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts
index 11fd545b5..76afe39f1 100644
--- a/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts
+++ b/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts
@@ -131,7 +131,7 @@ describe('extractModules()', () => {
attributes: [],
},
]);
- expect(moduleImports).to.eql([]);
+ expect(moduleImports.length).to.eql(2);
expect(htmlWithoutModules).to.eql(
'before
after
',
);
@@ -164,7 +164,7 @@ describe('extractModules()', () => {
attributes: [],
},
]);
- expect(moduleImports).to.eql([]);
+ expect(moduleImports.length).to.eql(2);
expect(htmlWithoutModules).to.eql(
'before
after
',
);
diff --git a/packages/rollup-plugin-polyfills-loader/test/snapshots/flattened.html b/packages/rollup-plugin-polyfills-loader/test/snapshots/flattened.html
index d905e0568..4a6a9d1f0 100644
--- a/packages/rollup-plugin-polyfills-loader/test/snapshots/flattened.html
+++ b/packages/rollup-plugin-polyfills-loader/test/snapshots/flattened.html
@@ -1,7 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/packages/rollup-plugin-polyfills-loader/test/snapshots/no-polyfills.html b/packages/rollup-plugin-polyfills-loader/test/snapshots/no-polyfills.html
index 509a80cca..301a09000 100644
--- a/packages/rollup-plugin-polyfills-loader/test/snapshots/no-polyfills.html
+++ b/packages/rollup-plugin-polyfills-loader/test/snapshots/no-polyfills.html
@@ -1,9 +1,9 @@
-
+
-
+
\ No newline at end of file
diff --git a/packages/rollup-plugin-polyfills-loader/test/snapshots/non-flattened.html b/packages/rollup-plugin-polyfills-loader/test/snapshots/non-flattened.html
index c98a6c868..4883fd602 100644
--- a/packages/rollup-plugin-polyfills-loader/test/snapshots/non-flattened.html
+++ b/packages/rollup-plugin-polyfills-loader/test/snapshots/non-flattened.html
@@ -1,7 +1,7 @@
-
+