mirror of https://github.com/grafana/grafana
Build: Reduce repetition in rollup configs (#93916)
* build(packages): add extendable pieces of rollup config * build(packages): rewrite rollup configs to make use of extendable partspull/101268/head
parent
047136c830
commit
eca045bc11
@ -1,53 +1,15 @@ |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { entryPoint, plugins, esmOutput, cjsOutput, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
// @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string)
|
||||
preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-data/src`), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins, |
||||
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-data')], |
||||
}, |
||||
tsDeclarationOutput(pkg), |
||||
]; |
||||
|
@ -1,53 +1,15 @@ |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
// @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string)
|
||||
preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-e2e-selectors/src`), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins, |
||||
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-e2e-selectors')], |
||||
}, |
||||
tsDeclarationOutput(pkg), |
||||
]; |
||||
|
@ -1,53 +1,15 @@ |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
// @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string)
|
||||
preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-ui/src`), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins, |
||||
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-flamegraph')], |
||||
}, |
||||
tsDeclarationOutput(pkg), |
||||
]; |
||||
|
@ -1,45 +1,15 @@ |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
preserveModules: true, |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins, |
||||
output: esmOutput(pkg, 'grafana-icons'), |
||||
}, |
||||
tsDeclarationOutput(pkg, { input: 'src/index.ts' }), |
||||
]; |
||||
|
@ -1,55 +1,16 @@ |
||||
import image from '@rollup/plugin-image'; |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
image(), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
// @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string)
|
||||
preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-prometheus/src`), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins: [...plugins, image()], |
||||
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-prometheus')], |
||||
}, |
||||
tsDeclarationOutput(pkg), |
||||
]; |
||||
|
@ -1,53 +1,15 @@ |
||||
import resolve from '@rollup/plugin-node-resolve'; |
||||
import { createRequire } from 'node:module'; |
||||
import path from 'path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||
|
||||
const rq = createRequire(import.meta.url); |
||||
const pkg = rq('./package.json'); |
||||
|
||||
const legacyOutputDefaults = { |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
|
||||
export default [ |
||||
{ |
||||
input: 'src/index.ts', |
||||
plugins: [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
resolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
], |
||||
output: [ |
||||
{ |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.main), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
{ |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: path.dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
// @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string)
|
||||
preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-runtime/src`), |
||||
...legacyOutputDefaults, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
input: entryPoint, |
||||
plugins, |
||||
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-runtime')], |
||||
}, |
||||
tsDeclarationOutput(pkg), |
||||
]; |
||||
|
@ -0,0 +1,58 @@ |
||||
// This file contains the common parts of the rollup configuration that are shared across multiple packages.
|
||||
import nodeResolve from '@rollup/plugin-node-resolve'; |
||||
import { dirname, resolve } from 'node:path'; |
||||
import dts from 'rollup-plugin-dts'; |
||||
import esbuild from 'rollup-plugin-esbuild'; |
||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
||||
|
||||
// This is the path to the root of the grafana project
|
||||
// Prefer PROJECT_CWD env var set by yarn berry
|
||||
const projectCwd = process.env.PROJECT_CWD ?? '../../'; |
||||
|
||||
export const entryPoint = 'src/index.ts'; |
||||
|
||||
// Plugins that are shared across all rollup configurations. Their order can affect build output.
|
||||
// Externalising and resolving modules should happen before transformation.
|
||||
export const plugins = [ |
||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
||||
nodeResolve(), |
||||
esbuild({ |
||||
target: 'es2018', |
||||
tsconfig: 'tsconfig.build.json', |
||||
}), |
||||
]; |
||||
|
||||
// Generates a rollup configuration for commonjs output.
|
||||
export function cjsOutput(pkg) { |
||||
return { |
||||
format: 'cjs', |
||||
sourcemap: true, |
||||
dir: dirname(pkg.publishConfig.main), |
||||
esModule: true, |
||||
interop: 'compat', |
||||
}; |
||||
} |
||||
|
||||
// Generate a rollup configuration for es module output.
|
||||
export function esmOutput(pkg, pkgName) { |
||||
return { |
||||
format: 'esm', |
||||
sourcemap: true, |
||||
dir: dirname(pkg.publishConfig.module), |
||||
preserveModules: true, |
||||
preserveModulesRoot: resolve(projectCwd, `packages/${pkgName}/src`), |
||||
}; |
||||
} |
||||
|
||||
// Generate a rollup configuration for rolling up typescript declaration files into a single file.
|
||||
export function tsDeclarationOutput(pkg, overrides = {}) { |
||||
return { |
||||
input: './compiled/index.d.ts', |
||||
plugins: [dts()], |
||||
output: { |
||||
file: pkg.publishConfig.types, |
||||
format: 'es', |
||||
}, |
||||
...overrides, |
||||
}; |
||||
} |
Loading…
Reference in new issue