mirror of https://github.com/joomla/joomla-cms.git
Improve build times (#42325)
This commit is contained in:
parent
8cfb7f8b71
commit
ff0670eda2
|
@ -4,10 +4,8 @@ const {
|
|||
const Ini = require('ini');
|
||||
const { dirname } = require('path');
|
||||
const Recurs = require('recursive-readdir');
|
||||
const Postcss = require('postcss');
|
||||
const Autoprefixer = require('autoprefixer');
|
||||
const CssNano = require('cssnano');
|
||||
const { minify } = require('terser');
|
||||
const { transform } = require('esbuild');
|
||||
const LightningCSS = require('lightningcss');
|
||||
|
||||
const RootPath = process.cwd();
|
||||
const dir = `${RootPath}/installation/language`;
|
||||
|
@ -35,10 +33,13 @@ module.exports.createErrorPages = async (options) => {
|
|||
let cssContent = await readFile(`${srcPath}/template.css`, { encoding: 'utf8' });
|
||||
let jsContent = await readFile(`${srcPath}/template.js`, { encoding: 'utf8' });
|
||||
|
||||
const cssMin = await Postcss([Autoprefixer, CssNano]).process(cssContent, { from: undefined });
|
||||
const { code } = LightningCSS.transform({
|
||||
code: Buffer.from(cssContent),
|
||||
minify: true,
|
||||
});
|
||||
|
||||
cssContent = cssMin.css;
|
||||
jsContent = await minify(jsContent);
|
||||
cssContent = code;
|
||||
jsContent = await transform(jsContent, { minify: true });
|
||||
|
||||
const processIni = async (file) => {
|
||||
const languageStrings = Ini.parse(await readFile(file, { encoding: 'utf8' }));
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
const {
|
||||
existsSync, copy, readFile, writeFile, mkdir,
|
||||
} = require('fs-extra');
|
||||
const CssNano = require('cssnano');
|
||||
const Postcss = require('postcss');
|
||||
const { minify } = require('terser');
|
||||
const LightningCSS = require('lightningcss');
|
||||
const { transform } = require('esbuild');
|
||||
|
||||
const { join } = require('path');
|
||||
|
||||
|
@ -72,10 +71,13 @@ module.exports.tinyMCE = async (packageName, version) => {
|
|||
/* Create the Highlighter plugin */
|
||||
// Get the css
|
||||
let cssContent = await readFile('build/media_source/plg_editors_tinymce/js/plugins/highlighter/source.css', { encoding: 'utf8' });
|
||||
cssContent = await Postcss([CssNano()]).process(cssContent, { from: undefined });
|
||||
cssContent = LightningCSS.transform({
|
||||
code: Buffer.from(cssContent),
|
||||
minify: true,
|
||||
}).code;
|
||||
// Get the JS
|
||||
let jsContent = await readFile('build/media_source/plg_editors_tinymce/js/plugins/highlighter/source.es6.js', { encoding: 'utf8' });
|
||||
jsContent = await minify(jsContent, { sourceMap: false, format: { comments: false } });
|
||||
jsContent = await transform(jsContent, { minify: true });
|
||||
// Write the HTML file
|
||||
const htmlContent = `<!DOCTYPE html>
|
||||
<html>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const { lstat, readFile, writeFile } = require('fs-extra');
|
||||
const { sep, basename } = require('path');
|
||||
const recursive = require('recursive-readdir');
|
||||
const { minify } = require('terser');
|
||||
const { transform } = require('esbuild');
|
||||
|
||||
const RootPath = process.cwd();
|
||||
|
||||
|
@ -69,7 +69,7 @@ const minifyJS = async (file) => {
|
|||
if (isMinified || needsDotJS) {
|
||||
minified = content;
|
||||
} else {
|
||||
minified = (await minify(content, { sourceMap: false, format: { comments: false } })).code;
|
||||
minified = (await transform(content, { minify: true })).code;
|
||||
}
|
||||
|
||||
const newFile = needsDotJS ? file.replace('.min.js', '.js') : file.replace('.js', '.min.js');
|
||||
|
|
|
@ -2,7 +2,7 @@ const {
|
|||
readdir, readFile, writeFile, unlink,
|
||||
} = require('fs').promises;
|
||||
const { resolve } = require('path');
|
||||
const { minify } = require('terser');
|
||||
const { transform } = require('esbuild');
|
||||
const rimraf = require('rimraf');
|
||||
const rollup = require('rollup');
|
||||
const { nodeResolve } = require('@rollup/plugin-node-resolve');
|
||||
|
@ -17,7 +17,7 @@ const outputFolder = 'media/vendor/bootstrap/js';
|
|||
|
||||
const createMinified = async (file) => {
|
||||
const initial = await readFile(resolve(outputFolder, file), { encoding: 'utf8' });
|
||||
const mini = await minify(initial.replace('./popper.js', `./popper.min.js?${bsVersion}`).replace('./dom.js', `./dom.min.js?${bsVersion}`), { sourceMap: false, format: { comments: false } });
|
||||
const mini = await transform(initial.replace('./popper.js', `./popper.min.js?${bsVersion}`).replace('./dom.js', `./dom.min.js?${bsVersion}`), { minify: true });
|
||||
await writeFile(resolve(outputFolder, file), initial.replace('./popper.js', `./popper.js?${bsVersion}`).replace('./dom.js', `./dom.js?${bsVersion}`), { encoding: 'utf8', mode: 0o644 });
|
||||
await writeFile(resolve(outputFolder, file.replace('.js', '.min.js')), mini.code, { encoding: 'utf8', mode: 0o644 });
|
||||
};
|
||||
|
@ -161,7 +161,7 @@ module.exports.bootstrapJs = async () => {
|
|||
try {
|
||||
await buildLegacy(inputFolder, 'index.es6.js');
|
||||
const es5File = await readFile(resolve(outputFolder, 'bootstrap-es5.js'), { encoding: 'utf8' });
|
||||
const mini = await minify(es5File, { sourceMap: false, format: { comments: false } });
|
||||
const mini = await transform(es5File, { minify: true });
|
||||
await writeFile(resolve(outputFolder, 'bootstrap-es5.min.js'), mini.code, { encoding: 'utf8', mode: 0o644 });
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('✅ Legacy done!');
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
const { access, writeFile } = require('fs').promises;
|
||||
const { constants } = require('fs');
|
||||
const Autoprefixer = require('autoprefixer');
|
||||
const CssNano = require('cssnano');
|
||||
const { basename, sep, resolve } = require('path');
|
||||
const rollup = require('rollup');
|
||||
const { nodeResolve } = require('@rollup/plugin-node-resolve');
|
||||
const replace = require('@rollup/plugin-replace');
|
||||
const { babel } = require('@rollup/plugin-babel');
|
||||
const Postcss = require('postcss');
|
||||
const LightningCSS = require('lightningcss');
|
||||
const { renderSync } = require('sass-embedded');
|
||||
const { minifyJsCode } = require('./minify.es6.js');
|
||||
const { handleESMToLegacy } = require('./compile-to-es5.es6.js');
|
||||
|
@ -35,8 +33,11 @@ const getWcMinifiedCss = async (file) => {
|
|||
}
|
||||
|
||||
if (typeof compiled === 'object' && compiled.css) {
|
||||
return Postcss([Autoprefixer(), CssNano()])
|
||||
.process(compiled.css.toString(), { from: undefined });
|
||||
const { code } = LightningCSS.transform({
|
||||
code: Buffer.from(compiled.css.toString()),
|
||||
minify: true,
|
||||
});
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { minify } = require('terser');
|
||||
const { transform } = require('esbuild');
|
||||
const { readFile, writeFile } = require('fs-extra');
|
||||
const { basename } = require('path');
|
||||
/**
|
||||
|
@ -9,7 +9,7 @@ const { basename } = require('path');
|
|||
*/
|
||||
const minifyFile = async (file) => {
|
||||
const fileContent = await readFile(file, { encoding: 'utf8' });
|
||||
const content = await minify(fileContent, { sourceMap: false, format: { comments: false } });
|
||||
const content = await transform(fileContent, { minify: true });
|
||||
await writeFile(file.replace('.js', '.min.js'), content.code, { encoding: 'utf8', mode: 0o644 });
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(`✅ Legacy js file: ${basename(file)}: minified`);
|
||||
|
@ -21,7 +21,7 @@ const minifyFile = async (file) => {
|
|||
* @param code
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const minifyCode = async (code) => minify(code, { sourceMap: false, format: { comments: false } });
|
||||
const minifyCode = async (code) => transform(code, { minify: true });
|
||||
|
||||
module.exports.minifyJs = minifyFile;
|
||||
module.exports.minifyJsCode = minifyCode;
|
||||
|
|
|
@ -2,9 +2,7 @@ const {
|
|||
copy, readFile, writeFile, ensureDir,
|
||||
} = require('fs-extra');
|
||||
const { dirname, sep } = require('path');
|
||||
const Postcss = require('postcss');
|
||||
const Autoprefixer = require('autoprefixer');
|
||||
const CssNano = require('cssnano');
|
||||
const LightningCSS = require('lightningcss');
|
||||
|
||||
module.exports.handleCssFile = async (file) => {
|
||||
const outputFile = file.replace(`${sep}build${sep}media_source${sep}`, `${sep}media${sep}`);
|
||||
|
@ -18,10 +16,13 @@ module.exports.handleCssFile = async (file) => {
|
|||
}
|
||||
|
||||
const content = await readFile(file, { encoding: 'utf8' });
|
||||
const cssMin = await Postcss([Autoprefixer, CssNano]).process(content, { from: undefined });
|
||||
const { code } = LightningCSS.transform({
|
||||
code: Buffer.from(content),
|
||||
minify: true,
|
||||
});
|
||||
|
||||
// Ensure the folder exists or create it
|
||||
await writeFile(outputFile.replace('.css', '.min.css'), cssMin.css.toString(), { encoding: 'utf8', mode: 0o644 });
|
||||
await writeFile(outputFile.replace('.css', '.min.css'), code, { encoding: 'utf8', mode: 0o644 });
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(`✅ CSS file copied/minified: ${file}`);
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
const Autoprefixer = require('autoprefixer');
|
||||
const CssNano = require('cssnano');
|
||||
const rtlcss = require('rtlcss');
|
||||
const { writeFile } = require('fs').promises;
|
||||
const { ensureDir } = require('fs-extra');
|
||||
const { dirname, sep } = require('path');
|
||||
const Postcss = require('postcss');
|
||||
const LightningCSS = require('lightningcss');
|
||||
const Sass = require('sass-embedded');
|
||||
|
||||
module.exports.handleScssFile = async (file) => {
|
||||
|
@ -21,28 +19,34 @@ module.exports.handleScssFile = async (file) => {
|
|||
process.exit(1);
|
||||
}
|
||||
|
||||
const plugins = [Autoprefixer];
|
||||
if (cssFile.endsWith('-rtl.css')) plugins.push(rtlcss);
|
||||
let contents = LightningCSS.transform({
|
||||
code: Buffer.from(compiled.css.toString()),
|
||||
minify: false,
|
||||
}).code;
|
||||
|
||||
// Auto prefixing
|
||||
const cleaner = Postcss(plugins);
|
||||
const res = await cleaner.process(compiled.css.toString(), { from: undefined });
|
||||
if (cssFile.endsWith('-rtl.css')) {
|
||||
contents = rtlcss.process(contents);
|
||||
}
|
||||
|
||||
// Ensure the folder exists or create it
|
||||
await ensureDir(dirname(cssFile), {});
|
||||
await writeFile(
|
||||
cssFile,
|
||||
res.css,
|
||||
contents,
|
||||
{ encoding: 'utf8', mode: 0o644 },
|
||||
);
|
||||
|
||||
const cssMin = await Postcss([CssNano]).process(res.css, { from: undefined });
|
||||
const cssMin = LightningCSS.transform({
|
||||
code: Buffer.from(contents),
|
||||
minify: true,
|
||||
exclude: LightningCSS.Features.VendorPrefixes,
|
||||
});
|
||||
|
||||
// Ensure the folder exists or create it
|
||||
await ensureDir(dirname(cssFile.replace('.css', '.min.css')), {});
|
||||
await writeFile(
|
||||
cssFile.replace('.css', '.min.css'),
|
||||
cssMin.css,
|
||||
cssMin.code,
|
||||
{ encoding: 'utf8', mode: 0o644 },
|
||||
);
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
const Autoprefixer = require('autoprefixer');
|
||||
const CssNano = require('cssnano');
|
||||
const Fs = require('fs').promises;
|
||||
const FsExtra = require('fs-extra');
|
||||
const { dirname, sep } = require('path');
|
||||
const Postcss = require('postcss');
|
||||
const LightningCSS = require('lightningcss');
|
||||
const Sass = require('sass-embedded');
|
||||
|
||||
module.exports.compile = async (file) => {
|
||||
|
@ -20,24 +18,30 @@ module.exports.compile = async (file) => {
|
|||
}
|
||||
|
||||
// Auto prefixing
|
||||
const cleaner = Postcss([Autoprefixer()]);
|
||||
const res = await cleaner.process(compiled.css.toString(), { from: undefined });
|
||||
const { code } = LightningCSS.transform({
|
||||
code: Buffer.from(compiled.css.toString()),
|
||||
minify: false,
|
||||
});
|
||||
|
||||
// Ensure the folder exists or create it
|
||||
await FsExtra.mkdirs(dirname(cssFile), {});
|
||||
await Fs.writeFile(
|
||||
cssFile,
|
||||
res.css.toString(),
|
||||
code,
|
||||
{ encoding: 'utf8', mode: 0o644 },
|
||||
);
|
||||
|
||||
const cssMin = await Postcss([CssNano]).process(res.css.toString(), { from: undefined });
|
||||
const cssMin = LightningCSS.transform({
|
||||
code: Buffer.from(code),
|
||||
minify: true,
|
||||
exclude: LightningCSS.Features.VendorPrefixes,
|
||||
});
|
||||
|
||||
// Ensure the folder exists or create it
|
||||
FsExtra.mkdirs(dirname(cssFile.replace('.css', '.min.css')), {});
|
||||
await Fs.writeFile(
|
||||
cssFile.replace('.css', '.min.css'),
|
||||
cssMin.css.toString(),
|
||||
cssMin.code,
|
||||
{ encoding: 'utf8', mode: 0o644 },
|
||||
);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
padding-left: $col-gutter-width * .5;
|
||||
}
|
||||
|
||||
@media (min-width: var(--breakpoint-md)) {
|
||||
@media (min-width: 768px) {
|
||||
[class^="media-col"], [class*=" media-col"] {
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
|
||||
.dndlist-dragged-row {
|
||||
background-color: #5bb75b !important;
|
||||
*background-color: #51a351 !important;
|
||||
background-image: -ms-linear-gradient(top, #62c462, #51a351) !important;
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)) !important;
|
||||
background-image: -webkit-linear-gradient(top, #62c462, #51a351) !important;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -80,12 +80,11 @@
|
|||
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||
"@rollup/plugin-replace": "^3.1.0",
|
||||
"@vue/compiler-sfc": "^3.3.4",
|
||||
"autoprefixer": "^10.4.15",
|
||||
"chokidar": "^3.5.3",
|
||||
"commander": "^8.3.0",
|
||||
"core-js": "^3.32.2",
|
||||
"cssnano": "^5.1.15",
|
||||
"cypress": "^13.2.0",
|
||||
"esbuild": "^0.19.5",
|
||||
"eslint": "^8.49.0",
|
||||
"eslint-config-airbnb-base": "^15.0.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
|
@ -94,6 +93,7 @@
|
|||
"ini": "^2.0.0",
|
||||
"jasmine-core": "^3.99.1",
|
||||
"joomla-cypress": "^0.0.16",
|
||||
"lightningcss": "^1.22.1",
|
||||
"mysql": "^2.18.1",
|
||||
"postcss": "^8.4.30",
|
||||
"postcss-scss": "^4.0.8",
|
||||
|
@ -108,7 +108,6 @@
|
|||
"stylelint": "^14.16.1",
|
||||
"stylelint-config-standard": "^24.0.0",
|
||||
"stylelint-order": "^5.0.0",
|
||||
"stylelint-scss": "^4.7.0",
|
||||
"terser": "^5.19.4"
|
||||
"stylelint-scss": "^4.7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue