Skip to content

Commit bf0709b

Browse files
alan-agius4filipesilva
authored andcommitted
feat(@angular-devkit/build-angular): disable critical CSS inlining by default
With this change we disable critical css inline by default. The main motivations are the following issues #20760 and #20864. BREAKING CHANGE: Inlining of critical CSS is no longer enable by default. Users already on Angular CLI version 12 and have not opted-out from using this feature are encouraged to opt-in using the browser builder `inlineCritical` option. The motivation behind this change is that the package used to parse the CSS has a number of defects which can lead to unactionable error messages when updating to Angular 13 from versions priors to 12. Such errors can be seen in the following issue #20760. ```json "configurations": { "production": { "optimization": { "styles": { "inlineCritical": true, } }, ... } ```
1 parent 585adac commit bf0709b

File tree

3 files changed

+9
-17
lines changed

3 files changed

+9
-17
lines changed

packages/angular_devkit/build_angular/src/builders/browser/schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
"inlineCritical": {
9090
"type": "boolean",
9191
"description": "Extract and inline critical CSS definitions to improve first paint time.",
92-
"default": true
92+
"default": false
9393
}
9494
},
9595
"additionalProperties": false

packages/angular_devkit/build_angular/src/builders/browser/tests/options/inline-critical_spec.ts

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
4040
harness.expectFile('dist/index.html').content.toContain(`body{color:#000;}`);
4141
});
4242

43-
it(`should extract critical css when 'optimization' is unset`, async () => {
43+
it(`should not extract critical css when 'optimization' is unset`, async () => {
4444
harness.useTarget('build', {
4545
...BASE_OPTIONS,
4646
styles: ['src/styles.css'],
@@ -50,15 +50,10 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
5050
const { result } = await harness.executeOnce();
5151

5252
expect(result?.success).toBe(true);
53-
harness
54-
.expectFile('dist/index.html')
55-
.content.toContain(
56-
`<link rel="stylesheet" href="styles.css" media="print" onload="this.media='all'">`,
57-
);
58-
harness.expectFile('dist/index.html').content.toContain(`body{color:#000;}`);
53+
harness.expectFile('dist/index.html').content.not.toContain(`<style`);
5954
});
6055

61-
it(`should extract critical css when 'optimization' is true`, async () => {
56+
it(`should not extract critical css when 'optimization' is true`, async () => {
6257
harness.useTarget('build', {
6358
...BASE_OPTIONS,
6459
styles: ['src/styles.css'],
@@ -68,12 +63,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
6863
const { result } = await harness.executeOnce();
6964

7065
expect(result?.success).toBe(true);
71-
harness
72-
.expectFile('dist/index.html')
73-
.content.toContain(
74-
`<link rel="stylesheet" href="styles.css" media="print" onload="this.media='all'">`,
75-
);
76-
harness.expectFile('dist/index.html').content.toContain(`body{color:#000;}`);
66+
harness.expectFile('dist/index.html').content.not.toContain(`<style`);
7767
});
7868

7969
it(`should not extract critical css when 'optimization' is false`, async () => {

packages/angular_devkit/build_angular/src/utils/normalize-optimization.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export function normalizeOptimization(
3131
? optimization.styles
3232
: {
3333
minify: !!optimization.styles,
34-
inlineCritical: !!optimization.styles,
34+
// inlineCritical is always false unless explictly set.
35+
inlineCritical: false,
3536
},
3637
fonts:
3738
typeof optimization.fonts === 'object'
@@ -46,7 +47,8 @@ export function normalizeOptimization(
4647
scripts: optimization,
4748
styles: {
4849
minify: optimization,
49-
inlineCritical: optimization,
50+
// inlineCritical is always false unless explictly set.
51+
inlineCritical: false,
5052
},
5153
fonts: {
5254
inline: optimization,

0 commit comments

Comments
 (0)