Skip to content

Commit cc2f3e7

Browse files
authored
fix: Enabling sideEffects on style loaders (#1423)
Co-authored-by: Ryan Christian <[email protected]>
1 parent c33f020 commit cc2f3e7

File tree

7 files changed

+51
-0
lines changed

7 files changed

+51
-0
lines changed

.changeset/gold-pumas-invite.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'preact-cli': patch
3+
---
4+
5+
Fixes bug with style loader that would strip non-module CSS files if 'sideEffects' was set to false for the package.

packages/cli/lib/lib/webpack/webpack-base-config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,11 @@ module.exports = function (env) {
269269
},
270270
},
271271
],
272+
// Don't consider CSS imports dead code even if the
273+
// containing package claims to have no side effects.
274+
// Remove this when webpack adds a warning or an error for this.
275+
// See https://github.com/webpack/webpack/issues/6571
276+
sideEffects: true,
272277
},
273278
{
274279
test: /\.(xml|html|txt|md)$/,

packages/cli/tests/build.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,16 @@ describe('preact build', () => {
208208
expect(() => build(dir)).not.toThrow();
209209
});
210210

211+
it('should import non-modules CSS even when side effects are false', async () => {
212+
let dir = await subject('side-effect-css');
213+
await build(dir);
214+
215+
let head = await getHead(dir);
216+
expect(head).toEqual(
217+
expect.stringMatching(getRegExpFromMarkup(images.sideEffectCss))
218+
);
219+
});
220+
211221
it('should copy resources from static to build directory', async () => {
212222
let dir = await subject('static-root');
213223
await build(dir);

packages/cli/tests/images/build.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,23 @@ exports.sass = `
5353
</body>
5454
`;
5555

56+
exports.sideEffectCss = `
57+
<head>
58+
<meta charset="utf-8">
59+
<title>side-effect-css<\\/title>
60+
<meta name="viewport" content="width=device-width,initial-scale=1">
61+
<meta name="mobile-web-app-capable" content="yes">
62+
<meta name="apple-mobile-web-app-capable" content="yes">
63+
<link rel="apple-touch-icon" href=\\"\\/assets\\/icons\\/apple-touch-icon\\.png\\">
64+
<link rel="manifest" href="\\/manifest\\.json">
65+
<style>h1{background:#673ab8}<\\/style>
66+
<link href=\\"/bundle.\\w{5}.css\\" rel=\\"stylesheet\\" media=\\"only x\\" onload=\\"this.media='all'\\">
67+
<noscript>
68+
<link rel=\\"stylesheet\\" href=\\"\\/bundle.\\w{5}.css\\">
69+
</noscript>
70+
<\\/head>
71+
`;
72+
5673
exports.prerender = {};
5774

5875
exports.prerender.heads = {};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { h } from 'preact';
2+
import './style.css';
3+
4+
export default () => {
5+
return <h1>SideEffect CSS test</h1>;
6+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"private": true,
3+
"name": "side-effect-css",
4+
"sideEffects": false
5+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
h1 {
2+
background: #673ab8;
3+
}

0 commit comments

Comments
 (0)