forked from chibivue-land/chibivue
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.ts
114 lines (107 loc) · 2.46 KB
/
build.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import path from 'node:path'
import { execSync } from 'node:child_process'
import { build } from 'esbuild'
import { rimraf } from 'rimraf'
import { bundle } from 'dts-bundle'
import { t } from 'chainsi'
const finishedBuild = (dir: string) =>
console.log(`${t('✔︎').green._} build: ${t(dir).blue._}`)
const NODE_EXTERNALS = [
'assert',
'buffer',
'child_process',
'cluster',
'console',
'constants',
'crypto',
'dgram',
'dns',
'domain',
'events',
'fs',
'http',
'http2',
'https',
'module',
'net',
'os',
'path',
'perf_hooks',
'process',
'punycode',
'querystring',
'readline',
'repl',
'stream',
'string_decoder',
'sys',
'timers',
'tls',
'tty',
'url',
'util',
'v8',
'vm',
'wasi',
'worker_threads',
'zlib',
].flatMap(name => [name, `node:${name}`])
const PACKAGES: Record<string, { external?: string[] }> = {
chibivue: {},
'compiler-core': {},
'compiler-dom': {},
'compiler-sfc': {},
'runtime-core': {},
'runtime-dom': {},
'runtime-vapor': {},
reactivity: {},
shared: {},
'@extensions/chibivue-router': {},
'@extensions/chibivue-store': {},
'@extensions/vite-plugin-chibivue': {
external: ['vite'],
},
}
export const buildMain = () => {
execSync('tsc -p tsconfig.build.json')
const promises = Object.entries(PACKAGES).map(async ([pkg, { external }]) => {
const res = await build({
entryPoints: [path.resolve(`packages/${pkg}/src/index`)],
target: 'esnext',
bundle: true,
outdir: `packages/${pkg}/dist`,
external: [...NODE_EXTERNALS, ...(external ?? [])],
format: 'esm',
plugins: [
{
name: 'TypeScriptDeclarationsPlugin',
setup(build: any) {
build.onEnd(() => {
bundle({
name: pkg,
main: `temp/${pkg}/src/index.d.ts`,
out: path.resolve(`packages/${pkg}/dist/index.d.ts`),
})
})
},
},
],
})
finishedBuild(`packages/${pkg}/dist`)
return res
})
return promises
}
export const clearMain = () =>
Object.entries(PACKAGES)
.map(([pkg]) => `packages/${pkg}/dist`)
.map(dir => rimraf(dir))
;(async function main() {
console.log('clear dist...')
await Promise.allSettled([...clearMain()])
console.log(`${t('✔︎').green._} finished clearing dist`)
console.log('building...')
const buildingMain = buildMain()
await Promise.all([...buildingMain])
execSync('rm -rf temp')
})()