Skip to content

Commit 1330a32

Browse files
authored
debt - use esbuild for CSS minification (microsoft#250820)
1 parent d49ebe6 commit 1330a32

13 files changed

+61
-1143
lines changed

build/gulpfile.reh.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
257257
const src = gulp.src(sourceFolderName + '/**', { base: '.' })
258258
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))
259259
.pipe(util.setExecutableBit(['**/*.sh']))
260-
.pipe(filter(['**', '!**/*.js.map']));
260+
.pipe(filter(['**', '!**/*.{js,css}.map']));
261261

262262
const workspaceExtensionPoints = ['debuggers', 'jsonValidation'];
263263
const isUIExtension = (manifest) => {
@@ -298,7 +298,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
298298
const extensions = gulp.src(extensionPaths, { base: '.build', dot: true });
299299
const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });
300300
const sources = es.merge(src, extensions, extensionsCommonDependencies)
301-
.pipe(filter(['**', '!**/*.js.map'], { dot: true }));
301+
.pipe(filter(['**', '!**/*.{js,css}.map'], { dot: true }));
302302

303303
let version = packageJson.version;
304304
const quality = product.quality;
@@ -333,7 +333,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
333333
const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
334334
const deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })
335335
// filter out unnecessary files, no source maps in server build
336-
.pipe(filter(['**', '!**/package-lock.json', '!**/*.js.map']))
336+
.pipe(filter(['**', '!**/package-lock.json', '!**/*.{js,css}.map']))
337337
.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))
338338
.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))
339339
.pipe(jsFilter)

build/gulpfile.vscode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
244244
const extensions = gulp.src(['.build/extensions/**', ...platformSpecificBuiltInExtensionsExclusions], { base: '.build', dot: true });
245245

246246
const sources = es.merge(src, extensions)
247-
.pipe(filter(['**', '!**/*.js.map'], { dot: true }));
247+
.pipe(filter(['**', '!**/*.{js,css}.map'], { dot: true }));
248248

249249
let version = packageJson.version;
250250
const quality = product.quality;
@@ -289,7 +289,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
289289
const dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat().concat('!**/*.mk');
290290

291291
const deps = gulp.src(dependenciesSrc, { base: '.', dot: true })
292-
.pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))
292+
.pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.{js,css}.map']))
293293
.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))
294294
.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))
295295
.pipe(jsFilter)

build/gulpfile.vscode.web.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ function packageTask(sourceFolderName, destinationFolderName) {
152152
const loader = gulp.src('build/loader.min', { base: 'build', dot: true }).pipe(rename('out/vs/loader.js')); // TODO@esm remove line when we stop supporting web-amd-esm-bridge
153153

154154
const sources = es.merge(src, extensions, loader)
155-
.pipe(filter(['**', '!**/*.js.map'], { dot: true }))
155+
.pipe(filter(['**', '!**/*.{js,css}.map'], { dot: true }))
156156
// TODO@esm remove me once we stop supporting our web-esm-bridge
157157
.pipe(es.through(function (file) {
158158
if (file.relative === 'out/vs/workbench/workbench.web.main.internal.css') {

build/lib/compilation.js

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/lib/compilation.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import File from 'vinyl';
1818
import * as task from './task';
1919
import { Mangler } from './mangle/index';
2020
import { RawSourceMap } from 'source-map';
21-
import { gulpPostcss } from './postcss';
2221
import ts = require('typescript');
2322
const watch = require('./watch');
2423

@@ -72,16 +71,12 @@ export function createCompile(src: string, { build, emitError, transpileOnly, pr
7271
const tsFilter = util.filter(data => /\.ts$/.test(data.path));
7372
const isUtf8Test = (f: File) => /(\/|\\)test(\/|\\).*utf8/.test(f.path);
7473
const isRuntimeJs = (f: File) => f.path.endsWith('.js') && !f.path.includes('fixtures');
75-
const isCSS = (f: File) => f.path.endsWith('.css') && !f.path.includes('fixtures');
7674
const noDeclarationsFilter = util.filter(data => !(/\.d\.ts$/.test(data.path)));
7775

78-
const postcssNesting = require('postcss-nesting');
79-
8076
const input = es.through();
8177
const output = input
8278
.pipe(util.$if(isUtf8Test, bom())) // this is required to preserve BOM in test files that loose it otherwise
8379
.pipe(util.$if(!build && isRuntimeJs, util.appendOwnPathSourceURL()))
84-
.pipe(util.$if(isCSS, gulpPostcss([postcssNesting()], err => reporter(String(err)))))
8580
.pipe(tsFilter)
8681
.pipe(util.loadSourcemaps())
8782
.pipe(compilation(token))

build/lib/mangle/index.js

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/lib/mangle/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,6 @@ function isNameTakenInFile(node: ts.Node, name: string): boolean {
280280
}
281281

282282
const skippedExportMangledFiles = [
283-
// Build
284-
'css.build',
285283

286284
// Monaco
287285
'editorCommon',

build/lib/optimize.js

Lines changed: 7 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/lib/optimize.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import fs from 'fs';
1111
import pump from 'pump';
1212
import VinylFile from 'vinyl';
1313
import * as bundle from './bundle';
14-
import { gulpPostcss } from './postcss';
1514
import esbuild from 'esbuild';
1615
import sourcemaps from 'gulp-sourcemaps';
1716
import fancyLog from 'fancy-log';
@@ -213,16 +212,14 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
213212
const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined;
214213

215214
return cb => {
216-
const cssnano = require('cssnano') as typeof import('cssnano');
217215
const svgmin = require('gulp-svgmin') as typeof import('gulp-svgmin');
218216

219-
const jsFilter = filter('**/*.js', { restore: true });
220-
const cssFilter = filter('**/*.css', { restore: true });
217+
const esbuildFilter = filter('**/*.{js,css}', { restore: true });
221218
const svgFilter = filter('**/*.svg', { restore: true });
222219

223220
pump(
224221
gulp.src([src + '/**', '!' + src + '/**/*.map']),
225-
jsFilter,
222+
esbuildFilter,
226223
sourcemaps.init({ loadMaps: true }),
227224
es.map((f: any, cb) => {
228225
esbuild.build({
@@ -233,12 +230,12 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
233230
packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages
234231
platform: 'neutral', // makes esm
235232
target: ['es2022'],
236-
write: false
233+
write: false,
237234
}).then(res => {
238-
const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path))!;
239-
const sourceMapFile = res.outputFiles.find(f => /\.js\.map$/.test(f.path))!;
235+
const jsOrCSSFile = res.outputFiles.find(f => /\.(js|css)$/.test(f.path))!;
236+
const sourceMapFile = res.outputFiles.find(f => /\.(js|css)\.map$/.test(f.path))!;
240237

241-
const contents = Buffer.from(jsFile.contents);
238+
const contents = Buffer.from(jsOrCSSFile.contents);
242239
const unicodeMatch = contents.toString().match(/[^\x00-\xFF]+/g);
243240
if (unicodeMatch) {
244241
cb(new Error(`Found non-ascii character ${unicodeMatch[0]} in the minified output of ${f.path}. Non-ASCII characters in the output can cause performance problems when loading. Please review if you have introduced a regular expression that esbuild is not automatically converting and convert it to using unicode escape sequences.`));
@@ -250,10 +247,7 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
250247
}
251248
}, cb);
252249
}),
253-
jsFilter.restore,
254-
cssFilter,
255-
gulpPostcss([cssnano({ preset: 'default' })]),
256-
cssFilter.restore,
250+
esbuildFilter.restore,
257251
svgFilter,
258252
svgmin(),
259253
svgFilter.restore,

build/lib/postcss.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)