element-plus/build/modules.ts
三咲智子 06fc7f4215
build!: improve esm exports (#3871)
* build: improve esm import

* refactor: change mjs for esm version

* chore: improve exports map
2021-10-18 16:29:33 +08:00

56 lines
1.6 KiB
TypeScript

import { rollup } from 'rollup'
import vue from 'rollup-plugin-vue'
import css from 'rollup-plugin-css-only'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import esbuild from 'rollup-plugin-esbuild'
import filesize from 'rollup-plugin-filesize'
import glob from 'fast-glob'
import { epRoot, pkgRoot } from './utils/paths'
import { RollupResolveEntryPlugin } from './plugins/rollup-plugin-entry'
import { generateExternal, writeBundles } from './utils/rollup'
import { excludeFiles } from './utils/pkg'
import { reporter } from './plugins/size-reporter'
import { buildConfigEntries } from './build-info'
import type { OutputOptions } from 'rollup'
export const buildModules = async () => {
const input = excludeFiles(
await glob('**/*.{js,ts,vue}', {
cwd: pkgRoot,
absolute: true,
onlyFiles: true,
})
)
const bundle = await rollup({
input,
plugins: [
await RollupResolveEntryPlugin(),
css(),
vue({ target: 'browser' }),
nodeResolve(),
commonjs(),
esbuild({
sourceMap: true,
}),
filesize({ reporter }),
],
external: await generateExternal({ full: false }),
treeshake: false,
})
await writeBundles(
bundle,
buildConfigEntries.map(([module, config]): OutputOptions => {
return {
format: config.format,
dir: config.output.path,
exports: module === 'cjs' ? 'named' : undefined,
preserveModules: true,
preserveModulesRoot: epRoot,
sourcemap: true,
entryFileNames: `[name].${config.ext}`,
}
})
)
}