Skip to content

Commit 159b80d

Browse files
authored
Use cssnano to minify main CSS file (facebook#569)
* Add cssnano to CSS generation * Add babel-polyfill * Call cssnano at the end * Fix tests * Add babelrc
1 parent 946e2ce commit 159b80d

File tree

7 files changed

+1297
-25
lines changed

7 files changed

+1297
-25
lines changed

.babelrc

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"env": {
3+
"test": {
4+
"presets": [
5+
"env"
6+
]
7+
}
8+
}
9+
}

lib/__tests__/build-files.tests.js

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const cssnano = require('cssnano');
12
const filepath = require('filepath');
23
const fm = require('front-matter');
34
const fs = require('fs-extra');
@@ -38,10 +39,12 @@ beforeAll(() => {
3839
glob(docsDir + '/assets/*'),
3940
glob(buildDir + '/' + siteConfig.projectName + '/img/*'),
4041
]).then(function(results) {
41-
inputMarkdownFiles = results[0];
42-
outputHTMLFiles = results[1];
43-
inputAssetsFiles = results[2];
44-
outputAssetsFiles = results[3];
42+
[
43+
inputMarkdownFiles,
44+
outputHTMLFiles,
45+
inputAssetsFiles,
46+
outputAssetsFiles,
47+
] = results;
4548
return;
4649
});
4750
});
@@ -85,11 +88,11 @@ test('Concatenated CSS files', function() {
8588
'utf8'
8689
),
8790
]).then(function(results) {
88-
const inputFiles = results[0];
89-
const outputFile = results[1];
90-
inputFiles.forEach(function(file) {
91+
const [inputFiles, outputFile] = results;
92+
inputFiles.forEach(async function(file) {
9193
const contents = fs.readFileSync(file, 'utf8');
92-
expect(outputFile).toContain(contents);
94+
const {css} = await cssnano.process(contents, {}, {preset: 'default'});
95+
expect(outputFile).toContain(css);
9396
});
9497
});
9598
});

lib/build-files.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* LICENSE file in the root directory of this source tree.
88
*/
99

10+
require('babel-polyfill');
1011
require('babel-register')({
1112
babelrc: false,
1213
only: [__dirname, process.cwd() + '/core'],

lib/server/generate.js

+15-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
function execute() {
8+
async function execute() {
99
const extractTranslations = require('../write-translations.js');
1010

1111
const CWD = process.cwd();
12+
const cssnano = require('cssnano');
1213
const fs = require('fs-extra');
1314
const readMetadata = require('./readMetadata.js');
1415
const path = require('path');
@@ -371,7 +372,7 @@ function execute() {
371372
}
372373
});
373374

374-
// copy all static files from user
375+
// Copy all static files from user.
375376
files = glob.sync(join(CWD, 'static', '**'), {dot: true});
376377
files.forEach(file => {
377378
// Why normalize? In case we are on Windows.
@@ -409,6 +410,18 @@ function execute() {
409410
}
410411
});
411412

413+
// Use cssnano to minify the final combined CSS.
414+
const mainCss = join(buildDir, 'css', 'main.css');
415+
const cssContent = fs.readFileSync(mainCss, 'utf8');
416+
const {css} = await cssnano.process(
417+
cssContent,
418+
/* postcssOpts */ {},
419+
/* cssnanoOpts */ {
420+
preset: 'default',
421+
}
422+
);
423+
fs.writeFileSync(mainCss, css);
424+
412425
// compile/copy pages from user
413426
let pagesArr = [];
414427
files = glob.sync(join(CWD, 'pages', '**'));

0 commit comments

Comments
 (0)