feat: separate umd and lib build

This commit is contained in:
Simon
2025-09-29 17:24:38 +08:00
parent 95c688873e
commit d6e37067cf
6 changed files with 907 additions and 17 deletions

845
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,17 +5,16 @@
"type": "module", "type": "module",
"main": "./dist/lib/page-agent.js", "main": "./dist/lib/page-agent.js",
"module": "./dist/lib/page-agent.js", "module": "./dist/lib/page-agent.js",
"types": "./dist/types/entry.d.ts", "types": "./dist/lib/PageAgent.d.ts",
"exports": { "exports": {
".": { ".": {
"types": "./dist/types/entry.d.ts", "types": "./dist/lib/PageAgent.d.ts",
"import": "./dist/lib/page-agent.js", "import": "./dist/lib/page-agent.js",
"default": "./dist/lib/page-agent.js" "default": "./dist/lib/page-agent.js"
} }
}, },
"files": [ "files": [
"dist/lib/", "dist/lib/",
"dist/types/",
"README.md", "README.md",
"LICENSE", "LICENSE",
"NOTICE" "NOTICE"
@@ -43,10 +42,10 @@
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"start": "vite", "start": "vite",
"build": "tsc -b && vite build && npm run build:lib", "build": "tsc -b && vite build && npm run build:lib && npm run build:umd",
"build:lib": "npm run types:lib && vite build --config vite.lib.config.ts", "build:lib": "vite build --config vite.lib.config.ts",
"build:lib:watch": "vite build --config vite.lib.config.ts --watch", "build:lib:watch": "vite build --config vite.lib.config.ts --watch",
"types:lib": "tsc -p tsconfig.lib.json", "build:umd": "vite build --config vite.umd.config.ts",
"lint": "eslint .", "lint": "eslint .",
"prepare": "husky" "prepare": "husky"
}, },
@@ -82,6 +81,7 @@
"tailwindcss": "^4.1.11", "tailwindcss": "^4.1.11",
"typescript": "^5.9.2", "typescript": "^5.9.2",
"typescript-eslint": "^8.39.0", "typescript-eslint": "^8.39.0",
"unplugin-dts": "^1.0.0-beta.6",
"vite": "^7.0.4", "vite": "^7.0.4",
"vite-plugin-css-injected-by-js": "^3.5.2", "vite-plugin-css-injected-by-js": "^3.5.2",
"wouter": "^3.7.1" "wouter": "^3.7.1"

View File

@@ -1,8 +1,7 @@
{ {
"extends": "./tsconfig.app.json", "extends": "./tsconfig.app.json",
"compilerOptions": { "compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.lib.tsbuildinfo", // "composite": true,
"composite": true,
"noEmit": false, "noEmit": false,
"declaration": true, "declaration": true,
"declarationMap": true, "declarationMap": true,

View File

@@ -21,5 +21,5 @@
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true "noUncheckedSideEffectImports": true
}, },
"include": ["vite.config.ts", "vite.lib.config.ts"] "include": ["vite.config.ts", "vite.lib.config.ts", "vite.umd.config.ts"]
} }

View File

@@ -1,5 +1,5 @@
import react from '@vitejs/plugin-react-swc'
import { dirname, resolve } from 'path' import { dirname, resolve } from 'path'
import dts from 'unplugin-dts/vite'
import { fileURLToPath } from 'url' import { fileURLToPath } from 'url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'
@@ -9,7 +9,10 @@ const __dirname = dirname(__filename)
// Library build configuration // Library build configuration
export default defineConfig({ export default defineConfig({
plugins: [react(), cssInjectedByJsPlugin({ relativeCSSInjection: true })], plugins: [
dts({ tsconfigPath: './tsconfig.lib.json' }),
cssInjectedByJsPlugin({ relativeCSSInjection: true }),
],
resolve: { resolve: {
alias: { alias: {
'@': resolve(__dirname, 'src'), '@': resolve(__dirname, 'src'),
@@ -22,16 +25,14 @@ export default defineConfig({
}, },
build: { build: {
lib: { lib: {
entry: resolve(__dirname, 'src/entry.ts'), entry: resolve(__dirname, 'src/PageAgent.ts'),
name: 'PageAgent', name: 'PageAgent',
fileName: 'page-agent', fileName: 'page-agent',
formats: ['umd', 'es'], formats: ['es'],
}, },
outDir: resolve(__dirname, 'dist', 'lib'), outDir: resolve(__dirname, 'dist', 'lib'),
rollupOptions: { rollupOptions: {
// ESM 包 应该 external但是 UMD 时不能 external external: ['@ai-sdk/openai', 'ai', 'ai-motion', 'chalk', 'zod'],
// @TODO 分成两份配置
// external: ['@ai-sdk/openai', 'ai', 'ai-motion', 'chalk', 'zod'],
output: { output: {
globals: { globals: {
// 定义全局变量映射 // 定义全局变量映射
@@ -39,7 +40,8 @@ export default defineConfig({
}, },
}, },
// minify: 'terser', // minify: 'terser',
// sourcemap: true, minify: false,
sourcemap: true,
}, },
define: { define: {
// 替换环境变量 // 替换环境变量

44
vite.umd.config.ts Normal file
View File

@@ -0,0 +1,44 @@
import { dirname, resolve } from 'path'
import { fileURLToPath } from 'url'
import { defineConfig } from 'vite'
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
// Library build configuration
export default defineConfig({
plugins: [cssInjectedByJsPlugin({ relativeCSSInjection: true })],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
publicDir: false,
esbuild: {
// 禁用严格的未使用变量检查
keepNames: true,
},
build: {
lib: {
entry: resolve(__dirname, 'src/entry.ts'),
name: 'PageAgent',
fileName: 'page-agent',
formats: ['umd'],
},
outDir: resolve(__dirname, 'dist', 'umd'),
rollupOptions: {
output: {
globals: {
// 定义全局变量映射
},
},
},
// minify: 'terser',
// sourcemap: true,
},
define: {
// 替换环境变量
'process.env.NODE_ENV': '"production"',
},
})