improve build setup and prepare for rollup3

This commit is contained in:
Rene Haas
2022-10-27 10:45:19 +02:00
parent f00616a5eb
commit f76870b1d9
8 changed files with 752 additions and 500 deletions
+5 -5
View File
@@ -2,11 +2,11 @@
"name": "@~local/rollup", "name": "@~local/rollup",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@rollup/plugin-alias": "^3.1.9", "@rollup/plugin-alias": "^4.0.2",
"@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-babel": "^6.0.2",
"@rollup/plugin-commonjs": "^22.0.2", "@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-html": "^0.2.0", "@rollup/plugin-html": "^1.0.1",
"@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-json": "^5.0.1",
"autoprefixer": "^10.4.7", "autoprefixer": "^10.4.7",
"cssnano": "^5.1.12", "cssnano": "^5.1.12",
"glob": "^7.1.6", "glob": "^7.1.6",
+17
View File
@@ -0,0 +1,17 @@
const path = require('path');
const { terser: rollupTerser } = require('rollup-plugin-terser');
const { rollupJson } = require('./plugins');
module.exports = (resolve, options) => {
const { extractPackageJson, outDir, rollup } = options;
const { input = './package.json', output = './package.json' } = extractPackageJson;
return {
input,
output: {
file: path.resolve(outDir, output),
},
plugins: [rollupJson()],
};
};
+2 -9
View File
@@ -3,13 +3,13 @@ const sass = require('sass');
const postcss = require('postcss'); const postcss = require('postcss');
const cssnano = require('cssnano'); const cssnano = require('cssnano');
const autoprefixer = require('autoprefixer'); const autoprefixer = require('autoprefixer');
const { nodeResolve: rollupPluginResolve } = require('@rollup/plugin-node-resolve');
const { babel: rollupBabelInputPlugin } = require('@rollup/plugin-babel'); const { babel: rollupBabelInputPlugin } = require('@rollup/plugin-babel');
const { esbuildResolve: rollupPluginEsBuildResolve } = require('rollup-plugin-esbuild-resolve'); const { esbuildResolve: rollupPluginEsBuildResolve } = require('rollup-plugin-esbuild-resolve');
const rollupPluginScss = require('rollup-plugin-scss'); const rollupPluginScss = require('rollup-plugin-scss');
const rollupPluginIgnoreImport = require('rollup-plugin-ignore-import'); const rollupPluginIgnoreImport = require('rollup-plugin-ignore-import');
const rollupPluginCommonjs = require('@rollup/plugin-commonjs'); const rollupPluginCommonjs = require('@rollup/plugin-commonjs');
const rollupPluginAlias = require('@rollup/plugin-alias'); const rollupPluginAlias = require('@rollup/plugin-alias');
const rollupPluginJson = require('@rollup/plugin-json');
const rollupPluginTs = require('rollup-plugin-typescript2'); const rollupPluginTs = require('rollup-plugin-typescript2');
const rollupPluginLicense = require('rollup-plugin-license'); const rollupPluginLicense = require('rollup-plugin-license');
const rollupPluginEsBuild = require('../plugins/esbuild'); const rollupPluginEsBuild = require('../plugins/esbuild');
@@ -37,14 +37,6 @@ module.exports = {
sourceMap: sourcemap, sourceMap: sourcemap,
extensions: resolve.extensions, extensions: resolve.extensions,
}), }),
rollupResolve: (resolve, resolveOnly) =>
rollupPluginResolve({
mainFields: ['browser', 'umd:main', 'module', 'main'],
moduleDirectories: resolve.directories,
extensions: resolve.extensions,
ignoreSideEffectsForRoot: true,
...(resolveOnly ? { resolveOnly } : {}),
}),
rollupEsbuildResolve: (resolve) => rollupEsbuildResolve: (resolve) =>
rollupPluginEsBuildResolve({ rollupPluginEsBuildResolve({
esbuild: { esbuild: {
@@ -136,4 +128,5 @@ module.exports = {
commentStyle: 'ignored', commentStyle: 'ignored',
}, },
}), }),
rollupJson: () => rollupPluginJson(),
}; };
+7
View File
@@ -37,6 +37,7 @@ const mergeAndResolveOptions = (userOptions) => {
rollup: defaultRollup, rollup: defaultRollup,
extractStyles: defaultExtractStyles, extractStyles: defaultExtractStyles,
extractTypes: defaultExtractTypes, extractTypes: defaultExtractTypes,
extractPackageJson: defaultExtractPackageJson,
verbose: defaultVerbose, verbose: defaultVerbose,
banner: defaultBanner, banner: defaultBanner,
useEsbuild: defaultUseEsbuild, useEsbuild: defaultUseEsbuild,
@@ -50,6 +51,7 @@ const mergeAndResolveOptions = (userOptions) => {
versions: rawVersions, versions: rawVersions,
extractStyles: rawExtractStyles, extractStyles: rawExtractStyles,
extractTypes: rawExtractTypes, extractTypes: rawExtractTypes,
extractPackageJson: rawExtractPackageJson,
verbose: rawVerbose, verbose: rawVerbose,
banner: rawBanner, banner: rawBanner,
useEsbuild: rawUseEsbuild, useEsbuild: rawUseEsbuild,
@@ -62,6 +64,7 @@ const mergeAndResolveOptions = (userOptions) => {
project: project || path.basename(projectPath), project: project || path.basename(projectPath),
extractStyles: rawExtractStyles ?? defaultExtractStyles, extractStyles: rawExtractStyles ?? defaultExtractStyles,
extractTypes: rawExtractTypes ?? defaultExtractTypes, extractTypes: rawExtractTypes ?? defaultExtractTypes,
extractPackageJson: rawExtractPackageJson ?? defaultExtractPackageJson,
verbose: rawVerbose ?? defaultVerbose, verbose: rawVerbose ?? defaultVerbose,
banner: rawBanner ?? defaultBanner, banner: rawBanner ?? defaultBanner,
versions: rawVersions ?? defaultVersions, versions: rawVersions ?? defaultVersions,
@@ -95,6 +98,7 @@ const mergeAndResolveOptions = (userOptions) => {
paths.types = resolvePath(projectPath, path.join(outDir, types)); paths.types = resolvePath(projectPath, path.join(outDir, types));
paths.styles = resolvePath(projectPath, path.join(outDir, styles)); paths.styles = resolvePath(projectPath, path.join(outDir, styles));
mergedOptions.outDir = resolvePath(projectPath, outDir);
mergedOptions.rollup.input = resolvePath(projectPath, mergedOptions.rollup.input, true); mergedOptions.rollup.input = resolvePath(projectPath, mergedOptions.rollup.input, true);
mergedOptions.rollup.output = { mergedOptions.rollup.output = {
...(mergedOptions.rollup.output || {}), ...(mergedOptions.rollup.output || {}),
@@ -116,6 +120,9 @@ const createConfig = (userOptions = {}) => {
const resultArr = Array.isArray(result) ? result : [result]; const resultArr = Array.isArray(result) ? result : [result];
if (verbose) { if (verbose) {
if (!Array.isArray(resultArr[0].plugins)) {
resultArr[0].plugins = [];
}
resultArr[0].plugins.push({ resultArr[0].plugins.push({
name: 'PROJECT', name: 'PROJECT',
buildStart() { buildStart() {
+1
View File
@@ -25,6 +25,7 @@ module.exports = {
], ],
extractStyles: false, extractStyles: false,
extractTypes: false, extractTypes: false,
extractPackageJson: false,
alias: {}, alias: {},
rollup: { rollup: {
input: './src/index', input: './src/index',
+4 -2
View File
@@ -2,14 +2,16 @@ const bundleScriptDefault = require('./bundle/script.default');
const bundleScriptEsbuild = require('./bundle/script.esbuild'); const bundleScriptEsbuild = require('./bundle/script.esbuild');
const bundleStyles = require('./bundle/styles'); const bundleStyles = require('./bundle/styles');
const bundleTypes = require('./bundle/types'); const bundleTypes = require('./bundle/types');
const bundlePackageJson = require('./bundle/packageJson');
module.exports = (resolve, options, esbuild) => { module.exports = (resolve, options, esbuild) => {
const { extractTypes, extractStyles } = options; const { extractTypes, extractStyles, extractPackageJson } = options;
const bundleScript = esbuild ? bundleScriptEsbuild : bundleScriptDefault; const bundleScript = esbuild ? bundleScriptEsbuild : bundleScriptDefault;
const styles = extractStyles && bundleStyles(resolve, options); const styles = extractStyles && bundleStyles(resolve, options);
const types = extractTypes && bundleTypes(resolve, options); const types = extractTypes && bundleTypes(resolve, options);
const js = bundleScript(resolve, options); const js = bundleScript(resolve, options);
const pkgJson = extractPackageJson && bundlePackageJson(resolve, options);
return [styles, types, js].flat().filter((build) => !!build); return [styles, types, js, pkgJson].flat().filter((build) => !!build);
}; };
+715 -484
View File
File diff suppressed because it is too large Load Diff
@@ -9,6 +9,7 @@ module.exports = createRollupConfig({
verbose: true, verbose: true,
extractStyles: true, extractStyles: true,
extractTypes: true, extractTypes: true,
extractPackageJson: false,
versions: [ versions: [
{ {
format: 'cjs', format: 'cjs',