diff --git a/package.json b/package.json index 62f1f1e..4de768b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@antv/layout", - "version": "2.0.0", + "version": "2.0.1", "description": "graph layout algorithm", "main": "dist/index.min.js", "module": "lib/index.js", @@ -16,12 +16,14 @@ "import": "./lib/worker.js", "default": "./dist/worker.js" }, + "./esm/*": "./esm/*", "./lib/*": "./lib/*" }, "files": [ "src", "package.json", "dist", + "esm", "lib", "LICENSE", "README.md" @@ -97,7 +99,7 @@ "build:watch": "rollup -c --watch", "build": "npm run clean && rollup -c && npm run size", "ci": "npm run build && npm run test", - "clean": "rimraf dist lib", + "clean": "rimraf dist lib esm", "dev": "vite", "prepublishOnly": "npm run build", "publish:alpha": "npm publish --tag alpha", diff --git a/rollup.config.mjs b/rollup.config.mjs index 35a0ddb..185b9fb 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,15 +1,41 @@ -import typescript from '@rollup/plugin-typescript'; -import resolve from '@rollup/plugin-node-resolve'; +import fs from 'node:fs'; +import path from 'node:path'; import commonjs from '@rollup/plugin-commonjs'; -import dts from 'rollup-plugin-dts'; +import resolve from '@rollup/plugin-node-resolve'; import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; +import dts from 'rollup-plugin-dts'; + +const packageJson = JSON.parse( + fs.readFileSync(new URL('./package.json', import.meta.url), 'utf8'), +); + +const externalPackages = [ + ...Object.keys(packageJson.dependencies ?? {}), + ...Object.keys(packageJson.peerDependencies ?? {}), + ...Object.keys(packageJson.optionalDependencies ?? {}), +]; + +const isExternal = (id) => + !id.startsWith('.') && + !path.isAbsolute(id) && + externalPackages.some((pkg) => id === pkg || id.startsWith(`${pkg}/`)); +const createPlugins = () => [ + resolve({ + browser: true, + extensions: ['.mjs', '.js', '.json', '.ts'], + }), + commonjs(), + typescript({ + tsconfig: './tsconfig.rollup.json', + declaration: false, + }), +]; -// 主库配置 -const mainConfig = { +const umdConfig = { input: 'src/index.ts', output: [ - // UMD 格式 { file: 'dist/index.js', format: 'umd', @@ -23,44 +49,50 @@ const mainConfig = { sourcemap: true, plugins: [terser()], }, - // ESM 格式 + ], + plugins: createPlugins(), +}; + +const esmConfig = { + input: 'src/index.ts', + output: [ { dir: 'lib', format: 'esm', sourcemap: true, preserveModules: true, preserveModulesRoot: 'src', - } - ], - plugins: [ - resolve(), - commonjs(), - typescript({ - tsconfig: './tsconfig.rollup.json', - declaration: false, - }), + }, + { + dir: 'esm', + format: 'esm', + sourcemap: true, + preserveModules: true, + preserveModulesRoot: 'src', + }, ], + external: isExternal, + plugins: createPlugins(), }; -// Worker ESM const workerESMConfig = { input: 'src/worker.ts', - output: { - file: 'lib/worker.js', - format: 'esm', - sourcemap: true, - }, - plugins: [ - resolve(), - commonjs(), - typescript({ - tsconfig: './tsconfig.rollup.json', - declaration: false, - }), + output: [ + { + file: 'lib/worker.js', + format: 'esm', + sourcemap: true, + }, + { + file: 'esm/worker.js', + format: 'esm', + sourcemap: true, + }, ], + external: isExternal, + plugins: createPlugins(), }; -// Worker IIFE const workerIIFEConfig = { input: 'src/worker.ts', output: { @@ -68,16 +100,9 @@ const workerIIFEConfig = { format: 'iife', sourcemap: true, name: 'LayoutWorker', - plugins: [terser()], // 压缩 Worker + plugins: [terser()], }, - plugins: [ - resolve(), - commonjs(), - typescript({ - tsconfig: './tsconfig.rollup.json', - declaration: false, - }), - ], + plugins: createPlugins(), }; const dtsConfig = { @@ -88,12 +113,8 @@ const dtsConfig = { preserveModules: true, preserveModulesRoot: 'src', }, + external: isExternal, plugins: [dts({ tsconfig: './tsconfig.rollup.json' })], }; -export default [ - mainConfig, - workerESMConfig, - workerIIFEConfig, - dtsConfig, -]; +export default [umdConfig, esmConfig, workerESMConfig, workerIIFEConfig, dtsConfig];