improve build

This commit is contained in:
Rene Haas
2022-08-04 14:35:33 +02:00
parent fa989cabb7
commit 8ac1f57de8
23 changed files with 6751 additions and 1306 deletions
@@ -5,7 +5,10 @@ module.exports = {
{ {
loose: true, loose: true,
targets: { targets: {
firefox: '54',
chrome: '58',
ie: '11', ie: '11',
esmodules: false,
}, },
}, },
], ],
+5 -10
View File
@@ -68,9 +68,9 @@ const mergeAndResolveOptions = (userOptions) => {
project, project,
mode: rawMode, mode: rawMode,
paths: rawPaths = {}, paths: rawPaths = {},
versions: rawVersions = {},
alias: rawAlias = {}, alias: rawAlias = {},
rollup: rawRollup = {}, rollup: rawRollup = {},
versions: rawVersions,
extractStyles: rawExtractStyles, extractStyles: rawExtractStyles,
extractTypes: rawExtractTypes, extractTypes: rawExtractTypes,
verbose: rawVerbose, verbose: rawVerbose,
@@ -85,14 +85,11 @@ const mergeAndResolveOptions = (userOptions) => {
extractTypes: rawExtractTypes ?? defaultExtractTypes, extractTypes: rawExtractTypes ?? defaultExtractTypes,
verbose: rawVerbose ?? defaultVerbose, verbose: rawVerbose ?? defaultVerbose,
banner: rawBanner ?? defaultBanner, banner: rawBanner ?? defaultBanner,
versions: rawVersions ?? defaultVersions,
paths: { paths: {
...defaultPaths, ...defaultPaths,
...rawPaths, ...rawPaths,
}, },
versions: {
...defaultVersions,
...rawVersions,
},
alias: { alias: {
...getWorkspaceAliases(), ...getWorkspaceAliases(),
...defaultAlias, ...defaultAlias,
@@ -126,8 +123,7 @@ const mergeAndResolveOptions = (userOptions) => {
const createConfig = (userOptions = {}) => { const createConfig = (userOptions = {}) => {
const options = mergeAndResolveOptions(userOptions); const options = mergeAndResolveOptions(userOptions);
const { project, mode, versions, extractTypes, extractStyles, verbose } = options; const { project, mode, extractTypes, extractStyles, verbose } = options;
const { module: buildModuleVersion } = versions;
const isBuild = mode === 'build'; const isBuild = mode === 'build';
if (verbose) { if (verbose) {
@@ -137,12 +133,11 @@ const createConfig = (userOptions = {}) => {
} }
if (isBuild) { if (isBuild) {
const umd = pipelineBuild(resolve, options); const js = pipelineBuild(resolve, options);
const esm = buildModuleVersion && pipelineBuild(resolve, options, true);
const types = extractTypes && pipelineTypes(resolve, options); const types = extractTypes && pipelineTypes(resolve, options);
const styles = extractStyles && pipelineStyles(resolve, options); const styles = extractStyles && pipelineStyles(resolve, options);
return [styles, types, umd, esm].flat().filter((build) => !!build); return [styles, types, js].flat().filter((build) => !!build);
} }
return [pipelineDev(resolve, options)]; return [pipelineDev(resolve, options)];
+14 -4
View File
@@ -9,10 +9,20 @@ module.exports = {
types: './types', types: './types',
styles: './styles', styles: './styles',
}, },
versions: { versions: [
minified: true, {
module: true, format: 'cjs',
}, generatedCode: 'es2015',
outputSuffix: '.cjs',
minifiedVersion: true,
},
{
format: 'esm',
generatedCode: 'es2015',
outputSuffix: '.esm',
minifiedVersion: true,
},
],
extractStyles: false, extractStyles: false,
extractTypes: false, extractTypes: false,
alias: {}, alias: {},
+61 -62
View File
@@ -10,74 +10,73 @@ const {
rollupLicense, rollupLicense,
} = require('./pipeline.common.plugins'); } = require('./pipeline.common.plugins');
const createOutputWithMinifiedVersion = (output, esm, buildMinifiedVersion) => const moduleFormats = ['es', 'esm', 'module'];
[output].concat( const createMinifiedOutput = (baseOutput) => ({
buildMinifiedVersion ...baseOutput,
? [ compact: true,
{ file: baseOutput.file.replace('.js', '.min.js'),
...output, sourcemap: false,
compact: true, plugins: [
file: output.file.replace('.js', '.min.js'), ...(baseOutput.plugins || []),
sourcemap: false, rollupTerser({
plugins: [ ecma: baseOutput.generatedCode === 'es2015' ? 2015 : 5,
...(output.plugins || []), safari10: true,
rollupTerser({ compress: {
ecma: esm ? 2015 : 5, evaluate: false,
safari10: true, module: moduleFormats.includes(baseOutput.format),
compress: { passes: 3,
evaluate: false, },
module: !!esm, }),
passes: 3, ],
}, });
}),
],
},
]
: []
);
module.exports = (resolve, options, esm) => { module.exports = (resolve, options) => {
const { rollup, paths, versions, alias, extractStyles, banner } = options; const { rollup, paths, versions, alias, extractStyles, banner } = options;
const { output: rollupOutput, input, plugins = [], ...rollupOptions } = rollup; const { output: rollupOutput, input, plugins = [], ...rollupOptions } = rollup;
const { name, file, globals, exports, sourcemap: rawSourcemap, ...outputConfig } = rollupOutput; const { name, file, globals, exports, sourcemap: rawSourcemap, ...outputConfig } = rollupOutput;
const { minified: buildMinifiedVersion } = versions;
const { src: srcPath, dist: distPath } = paths; const { src: srcPath, dist: distPath } = paths;
const sourcemap = rawSourcemap; const sourcemap = rawSourcemap;
const output = createOutputWithMinifiedVersion( return versions
{ .map(({ format, generatedCode, file: filePathOverride, outputSuffix, minifiedVersion }) => {
...outputConfig, const needsGlobals = format === 'umd' || format === 'iife';
...(!esm && { const filePath = path.resolve(distPath, `${file}${outputSuffix || ''}.js`);
name,
globals,
exports,
}),
sourcemap,
format: esm ? 'esm' : 'umd',
generatedCode: esm ? 'es2015' : 'es5',
file: path.resolve(distPath, `${file}${esm ? '.esm' : ''}.js`),
},
esm,
buildMinifiedVersion
);
return { const baseOutput = {
input, ...outputConfig,
output, ...(needsGlobals && {
treeshake: { name,
propertyReadSideEffects: false, globals,
moduleSideEffects: false, exports,
}, }),
...rollupOptions, sourcemap,
plugins: [ format,
rollupLicense(banner, sourcemap), generatedCode,
rollupAlias(alias), file: typeof filePathOverride === 'function' ? filePathOverride(filePath) : filePath,
rollupScss(banner, sourcemap, extractStyles, false), };
rollupTs(srcPath), const output = [baseOutput, minifiedVersion && createMinifiedOutput(baseOutput)].filter(
rollupResolve(srcPath, resolve), Boolean
rollupCommonjs(sourcemap, resolve), );
rollupBabel(resolve, esm),
...plugins, return {
].filter(Boolean), input,
}; output,
treeshake: {
propertyReadSideEffects: false,
moduleSideEffects: false,
},
...rollupOptions,
plugins: [
rollupLicense(banner, sourcemap),
rollupAlias(alias),
rollupScss(banner, sourcemap, extractStyles, false),
rollupTs(srcPath),
rollupResolve(srcPath, resolve),
rollupCommonjs(sourcemap, resolve),
rollupBabel(resolve, generatedCode === 'es2015'),
...plugins,
].filter(Boolean),
};
})
.flat();
}; };
+4 -4
View File
@@ -10,8 +10,8 @@ const rollupPluginAlias = require('@rollup/plugin-alias');
const rollupPluginTs = require('rollup-plugin-typescript2'); const rollupPluginTs = require('rollup-plugin-typescript2');
const { default: rollupPluginEsBuild } = require('rollup-plugin-esbuild'); const { default: rollupPluginEsBuild } = require('rollup-plugin-esbuild');
const rollupPluginLicense = require('rollup-plugin-license'); const rollupPluginLicense = require('rollup-plugin-license');
const babelConfigUmd = require('./babel.config.umd'); const babelConfigEs5 = require('./babel.config.es5');
const babelConfigEsm = require('./babel.config.esm'); const babelConfigEs6 = require('./babel.config.es2015');
module.exports = { module.exports = {
rollupAlias: (aliasEntries) => rollupAlias: (aliasEntries) =>
@@ -60,9 +60,9 @@ module.exports = {
target: 'es6', target: 'es6',
tsconfig: './tsconfig.json', tsconfig: './tsconfig.json',
}), }),
rollupBabel: (resolve, esm) => rollupBabel: (resolve, es6) =>
rollupBabelInputPlugin({ rollupBabelInputPlugin({
...(esm ? babelConfigEsm : babelConfigUmd), ...(es6 ? babelConfigEs6 : babelConfigEs5),
assumptions: { assumptions: {
enumerableModuleMeta: false, enumerableModuleMeta: false,
constantReexports: true, constantReexports: true,
@@ -35,10 +35,13 @@ module.exports = (testDir, mode = 'dev', onListening = null) => {
dist, dist,
src: path.resolve(testDir, './'), src: path.resolve(testDir, './'),
}, },
versions: { versions: [
minified: false, {
module: false, format: 'esm',
}, generatedCode: 'es2015',
minifiedVersion: false,
},
],
extractStyle: false, extractStyle: false,
rollup: { rollup: {
input: path.resolve(testDir, meta.input), input: path.resolve(testDir, meta.input),
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -28,7 +28,7 @@
"types", "types",
"styles" "styles"
], ],
"main": "dist/overlayscrollbars.js", "main": "dist/overlayscrollbars.cjs.js",
"module": "dist/overlayscrollbars.esm.js", "module": "dist/overlayscrollbars.esm.js",
"types": "types/overlayscrollbars.d.ts", "types": "types/overlayscrollbars.d.ts",
"scripts": { "scripts": {
@@ -1,3 +1,4 @@
const { dirname, basename, resolve } = require('path');
const { terser: rollupTerser } = require('rollup-plugin-terser'); const { terser: rollupTerser } = require('rollup-plugin-terser');
const { summary } = require('rollup-plugin-summary'); const { summary } = require('rollup-plugin-summary');
const createRollupConfig = require('@~local/rollup'); const createRollupConfig = require('@~local/rollup');
@@ -8,6 +9,36 @@ module.exports = createRollupConfig({
verbose: true, verbose: true,
extractStyles: true, extractStyles: true,
extractTypes: true, extractTypes: true,
versions: [
{
format: 'cjs',
generatedCode: 'es2015',
outputSuffix: '.cjs',
minifiedVersion: true,
},
{
format: 'esm',
generatedCode: 'es2015',
outputSuffix: '.esm',
minifiedVersion: true,
},
{
format: 'iife',
generatedCode: 'es2015',
outputSuffix: '.browser.es6',
minifiedVersion: true,
file: (originalPath) =>
`${resolve(dirname(originalPath), 'browser', basename(originalPath))}`,
},
{
format: 'iife',
generatedCode: 'es5',
outputSuffix: '.browser.es5',
minifiedVersion: true,
file: (originalPath) =>
`${resolve(dirname(originalPath), 'browser', basename(originalPath))}`,
},
],
banner: `OverlayScrollbars banner: `OverlayScrollbars
Version: ${version} Version: ${version}