feat: replace esbuild with Rollup, add CJS/UMD bundles and deep import support

Build pipeline now consists of two passes:
  1. tsc --outDir dist  — individual ESM modules for deep imports
  2. rollup -c           — bundled ESM, CJS, and UMD (minified + unminified)

Package.json changes:
  - main/dist/index.cjs (CJS for require())
  - module/dist/index.js (ESM for bundlers)
  - types/dist/index.d.ts (bundled declarations via rollup-plugin-dts)
  - unpkg/dist/index.umd.js (CDN entry)
  - exports map with ./dist/* wildcard for deep imports
  - sideEffects: true since every component calls customElements.define
  - files: [dist, README.md]

tsconfig.json: adds declarationMap: true for Go-to-Definition to source.

Dependencies: removed esbuild, added rollup, @rollup/plugin-typescript,
@rollup/plugin-terser, rollup-plugin-dts, tslib.
main
Buddy 3 months ago
parent 6906505a53
commit 3ec2d07115

1261
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -2,17 +2,27 @@
"name": "leaflet-components", "name": "leaflet-components",
"version": "0.1.0", "version": "0.1.0",
"description": "LeafletJS as Web Components", "description": "LeafletJS as Web Components",
"main": "dist/index.js", "main": "dist/index.cjs",
"module": "dist/index.js", "module": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"unpkg": "dist/index.umd.js",
"exports": { "exports": {
".": { ".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js", "import": "./dist/index.js",
"types": "./dist/index.d.ts" "require": "./dist/index.cjs"
} },
"./dist/*": "./dist/*",
"./package.json": "./package.json"
}, },
"sideEffects": true,
"files": [
"dist",
"README.md"
],
"scripts": { "scripts": {
"build": "rm -rf dist && tsc --emitDeclarationOnly && esbuild src/index.ts --bundle --format=esm --outfile=dist/index.js", "build": "rm -rf dist && tsc --outDir dist && rollup -c rollup.config.mjs",
"typecheck": "tsc --noEmit",
"lint": "eslint 'src/**/*.{ts,js}'", "lint": "eslint 'src/**/*.{ts,js}'",
"format": "prettier --write 'src/**/*.{ts,js,json,md}'", "format": "prettier --write 'src/**/*.{ts,js,json,md}'",
"prepublishOnly": "npm run build" "prepublishOnly": "npm run build"
@ -29,14 +39,18 @@
"leaflet": "1.9.4" "leaflet": "1.9.4"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-terser": "^1.0.0",
"@rollup/plugin-typescript": "^12.3.0",
"@types/leaflet": "1.9.21", "@types/leaflet": "1.9.21",
"@typescript-eslint/eslint-plugin": "8.60.1", "@typescript-eslint/eslint-plugin": "8.60.1",
"@typescript-eslint/parser": "8.60.1", "@typescript-eslint/parser": "8.60.1",
"esbuild": "^0.28.0",
"eslint": "10.4.1", "eslint": "10.4.1",
"eslint-config-prettier": "10.1.8", "eslint-config-prettier": "10.1.8",
"eslint-plugin-prettier": "5.5.6", "eslint-plugin-prettier": "5.5.6",
"prettier": "3.8.3", "prettier": "3.8.3",
"rollup": "^4.61.1",
"rollup-plugin-dts": "^6.4.1",
"tslib": "^2.8.1",
"typescript": "6.0.3" "typescript": "6.0.3"
} }
} }

@ -0,0 +1,25 @@
import typescript from '@rollup/plugin-typescript';
import terser from '@rollup/plugin-terser';
import dts from 'rollup-plugin-dts';
export default [
{
input: 'src/index.ts',
external: ['leaflet'],
plugins: [typescript({ declaration: false, declarationMap: false })],
output: [
{ format: 'es', file: 'dist/index.js' },
{ format: 'es', file: 'dist/index.min.js', plugins: [terser()] },
{ format: 'cjs', file: 'dist/index.cjs' },
{ format: 'cjs', file: 'dist/index.min.cjs', plugins: [terser()] },
{ format: 'umd', name: 'LeafletComponents', file: 'dist/index.umd.js', globals: { leaflet: 'L' } },
{ format: 'umd', name: 'LeafletComponents', file: 'dist/index.umd.min.js', globals: { leaflet: 'L' }, plugins: [terser()] },
],
},
{
input: 'src/index.ts',
external: ['leaflet'],
plugins: [dts()],
output: { format: 'es', file: 'dist/index.d.ts' },
},
];

@ -5,6 +5,7 @@
"moduleResolution": "bundler", "moduleResolution": "bundler",
"lib": ["ESNext", "DOM", "DOM.Iterable"], "lib": ["ESNext", "DOM", "DOM.Iterable"],
"declaration": true, "declaration": true,
"declarationMap": true,
"outDir": "./dist", "outDir": "./dist",
"rootDir": "./src", "rootDir": "./src",
"strict": true, "strict": true,

Loading…
Cancel
Save