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 { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { entryPoint, plugins, esmOutput, cjsOutput, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins, |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-data')], |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
tsDeclarationOutput(pkg), |
||||||
]; |
]; |
||||||
|
@ -1,53 +1,15 @@ |
|||||||
import resolve from '@rollup/plugin-node-resolve'; |
|
||||||
import { createRequire } from 'node:module'; |
import { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins, |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-e2e-selectors')], |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
tsDeclarationOutput(pkg), |
||||||
]; |
]; |
||||||
|
@ -1,53 +1,15 @@ |
|||||||
import resolve from '@rollup/plugin-node-resolve'; |
|
||||||
import { createRequire } from 'node:module'; |
import { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins, |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-flamegraph')], |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
tsDeclarationOutput(pkg), |
||||||
]; |
]; |
||||||
|
@ -1,45 +1,15 @@ |
|||||||
import resolve from '@rollup/plugin-node-resolve'; |
|
||||||
import { createRequire } from 'node:module'; |
import { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins, |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: esmOutput(pkg, 'grafana-icons'), |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
tsDeclarationOutput(pkg, { input: 'src/index.ts' }), |
||||||
]; |
]; |
||||||
|
@ -1,55 +1,16 @@ |
|||||||
import image from '@rollup/plugin-image'; |
import image from '@rollup/plugin-image'; |
||||||
import resolve from '@rollup/plugin-node-resolve'; |
|
||||||
import { createRequire } from 'node:module'; |
import { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins: [...plugins, image()], |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-prometheus')], |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
tsDeclarationOutput(pkg), |
||||||
]; |
]; |
||||||
|
@ -1,53 +1,15 @@ |
|||||||
import resolve from '@rollup/plugin-node-resolve'; |
|
||||||
import { createRequire } from 'node:module'; |
import { createRequire } from 'node:module'; |
||||||
import path from 'path'; |
|
||||||
import dts from 'rollup-plugin-dts'; |
import { cjsOutput, entryPoint, esmOutput, plugins, tsDeclarationOutput } from '../rollup.config.parts'; |
||||||
import esbuild from 'rollup-plugin-esbuild'; |
|
||||||
import { nodeExternals } from 'rollup-plugin-node-externals'; |
|
||||||
|
|
||||||
const rq = createRequire(import.meta.url); |
const rq = createRequire(import.meta.url); |
||||||
const pkg = rq('./package.json'); |
const pkg = rq('./package.json'); |
||||||
|
|
||||||
const legacyOutputDefaults = { |
|
||||||
esModule: true, |
|
||||||
interop: 'compat', |
|
||||||
}; |
|
||||||
|
|
||||||
export default [ |
export default [ |
||||||
{ |
{ |
||||||
input: 'src/index.ts', |
input: entryPoint, |
||||||
plugins: [ |
plugins, |
||||||
nodeExternals({ deps: true, packagePath: './package.json' }), |
output: [cjsOutput(pkg), esmOutput(pkg, 'grafana-runtime')], |
||||||
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', |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
|
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