Skip to content

Commit 7b3a8de

Browse files
authored
Merge pull request #101 from sveltejs/gh-84
order css chunks by filename
2 parents 949e28e + a9d9fcb commit 7b3a8de

File tree

8 files changed

+80
-1
lines changed

8 files changed

+80
-1
lines changed

index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,9 @@ module.exports = function svelte(options = {}) {
302302
const sources = [];
303303
const sourcesContent = [];
304304

305-
for (let chunk of cssLookup.values()) {
305+
const chunks = Array.from(cssLookup.keys()).sort().map(key => cssLookup.get(key));
306+
307+
for (let chunk of chunks) {
306308
if (!chunk.code) continue;
307309
result += chunk.code + '\n';
308310

test/deterministic-css/expected/bundle.css

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/deterministic-css/src/A.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<p class="a">red</p>
2+
3+
<style>
4+
.a {
5+
color: red;
6+
}
7+
</style>

test/deterministic-css/src/App.svelte

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
import A from './A.svelte';
3+
import B from './B.svelte';
4+
import C from './C.svelte';
5+
</script>
6+
7+
<A/>
8+
<B/>
9+
<C/>

test/deterministic-css/src/B.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<p class="b">green</p>
2+
3+
<style>
4+
.b {
5+
color: green;
6+
}
7+
</style>

test/deterministic-css/src/C.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<p class="c">blue</p>
2+
3+
<style>
4+
.c {
5+
color: blue;
6+
}
7+
</style>

test/deterministic-css/src/main.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import App from './App.svelte';
2+
3+
new App({
4+
target: document.body
5+
});

test/test.js

+37
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const fs = require('fs');
12
const path = require('path');
23
const sander = require('sander');
34
const assert = require('assert');
@@ -255,4 +256,40 @@ describe('rollup-plugin-svelte', () => {
255256
assert.deepEqual(warnings.map(w => w.code), ['a11y-hidden', 'a11y-distracting-elements']);
256257
assert.deepEqual(handled.map(w => w.code), ['a11y-hidden']);
257258
});
259+
260+
it('bundles CSS deterministically', async () => {
261+
sander.rimrafSync('test/deterministic-css/dist');
262+
sander.mkdirSync('test/deterministic-css/dist');
263+
264+
let css;
265+
266+
const bundle = await rollup.rollup({
267+
input: 'test/deterministic-css/src/main.js',
268+
plugins: [
269+
{
270+
resolveId: async (id) => {
271+
if (/A\.svelte/.test(id)) {
272+
await new Promise(f => setTimeout(f, 50));
273+
}
274+
}
275+
},
276+
plugin({
277+
css: value => {
278+
css = value;
279+
css.write('test/deterministic-css/dist/bundle.css');
280+
}
281+
})
282+
]
283+
});
284+
285+
await bundle.write({
286+
format: 'iife',
287+
file: 'test/deterministic-css/dist/bundle.js'
288+
});
289+
290+
assert.equal(
291+
fs.readFileSync('test/deterministic-css/dist/bundle.css', 'utf-8'),
292+
fs.readFileSync('test/deterministic-css/expected/bundle.css', 'utf-8')
293+
);
294+
});
258295
});

0 commit comments

Comments
 (0)