Skip to content

Commit 74276d0

Browse files
authored
feat: use vite8 (#7353)
* feat: use vite8 * chore: update version * chore: upgrade deps to latest versions - vite: 8.0.0-beta.8 -> 8.0.0-beta.13 - vitest: ^4.0.17 -> ^4.0.18 - @vitejs/plugin-vue: ^6.0.3 -> ^6.0.4 - @vitest/coverage-v8: ^4.0.17 -> ^4.0.18 - oxc-transform: ^0.108.0 -> ^0.112.0 fix: add PerformantEllipsis doc path mapping in gen-web-types * chore: upgrade vite8 toolchain deps to stable * chore: remove oxc jsx comment * chore: update vite8-related deps * chore: update vite8 toolchain deps * chore: allow vite patch updates
1 parent c12c25c commit 74276d0

8 files changed

Lines changed: 104 additions & 172 deletions

File tree

build/utils/tsToJs.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
1-
import { transformSync } from 'esbuild'
1+
import { transformSync } from 'oxc-transform'
22

33
export function tsToJs(content: string | null): string {
44
if (!content) {
55
return ''
66
}
7-
// esbuild will remove blank line
8-
const beforeTransformContent = content.replace(
9-
/\n(\s)*\n/g,
10-
'\n__blankline\n'
11-
)
12-
const { code } = transformSync(beforeTransformContent, {
13-
loader: 'ts',
14-
minify: false,
15-
minifyWhitespace: false,
16-
charset: 'utf8'
7+
const { code, errors } = transformSync('file.ts', content, {
8+
typescript: {
9+
onlyRemoveTypeImports: true
10+
}
1711
})
18-
return code.trim().replace(/__blankline;/g, '')
12+
if (errors.length > 0) {
13+
console.error('oxc-transform errors:', errors)
14+
}
15+
return code.trim()
1916
}

build/vite-plugin-demo.ts

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import { demoIndexTransFormPlugin } from './vite-plugin-index-tranform'
66

77
const fileRegex = /\.(md|vue)$/
88

9-
const vuePlugin = vue({
10-
include: [/\.vue$/, /\.md$/]
11-
})
12-
139
export function createDemoPlugin(): Plugin[] {
10+
const vuePlugin = vue({
11+
include: [/\.vue$/, /\.md$/]
12+
})
13+
1414
const naiveDemoVitePlugin: Plugin = {
1515
name: 'demo-vite',
1616
async transform(_, id) {
@@ -23,22 +23,8 @@ export function createDemoPlugin(): Plugin[] {
2323
if (fileRegex.test(file)) {
2424
const code = await getTransformedVueSrc(file)
2525
if (code === undefined)
26-
return []
27-
28-
const { handleHotUpdate } = vuePlugin
29-
if (typeof handleHotUpdate === 'function') {
30-
return handleHotUpdate({
31-
...ctx,
32-
read: () => code
33-
})
34-
}
35-
else if (handleHotUpdate?.handler) {
36-
return handleHotUpdate.handler({
37-
...ctx,
38-
read: () => code
39-
})
40-
}
41-
return []
26+
return
27+
ctx.read = () => code
4228
}
4329
}
4430
}

package.json

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
"scripts": {
3939
"start": "pnpm run dev",
4040
"dev": "pnpm run clean && pnpm run gen-version && pnpm run gen-volar-dts && NODE_ENV=development vite",
41-
"build:package": "pnpm run gen-version && pnpm run clean && pnpm run gen-volar-dts && tsc -b --force tsconfig.esm.json && tsx scripts/pre-build/pre-cjs-build.ts && tsc -b --force tsconfig.cjs.json && rollup -c && pnpm run test:umd && pnpm run test:esm && pnpm run post-build && rimraf {es,lib}/*.tsbuildinfo",
41+
"build:package": "pnpm run gen-version && pnpm run clean && pnpm run gen-volar-dts && tsc -b --force tsconfig.esm.json && tsx scripts/pre-build/pre-cjs-build.ts && tsc -b --force tsconfig.cjs.json && pnpm run build:dist && pnpm run test:umd && pnpm run test:esm && pnpm run post-build && rimraf {es,lib}/*.tsbuildinfo",
42+
"build:dist": "BUILD_ENV=development vite build -c vite.build.mts && BUILD_ENV=production vite build -c vite.build.mts",
4243
"build:themes": "tsc -b --force themes/tusimple/tsconfig.esm.json && tsc -b --force themes/tusimple/tsconfig.cjs.json",
4344
"build:site": "bash ./scripts/pre-build-site/pre-build-site.sh && NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && bash ./scripts/post-build-site/post-build-site.sh",
4445
"clean": "rimraf site lib es dist node_modules/naive-ui themes/tusimple/es themes/tusimple/lib",
@@ -99,11 +100,7 @@
99100
"@babel/preset-env": "^7.28.0",
100101
"@babel/traverse": "^7.28.0",
101102
"@lylajs/web": "^2.1.0",
102-
"@rollup/plugin-babel": "^6.0.4",
103-
"@rollup/plugin-commonjs": "^28.0.6",
104-
"@rollup/plugin-node-resolve": "^16.0.1",
105-
"@rollup/plugin-replace": "^6.0.2",
106-
"@rollup/plugin-terser": "^0.4.4",
103+
"@rollup/plugin-babel": "^7.0.0",
107104
"@types/babel__core": "^7.20.5",
108105
"@types/babel__generator": "^7.27.0",
109106
"@types/babel__traverse": "^7.28.0",
@@ -114,16 +111,15 @@
114111
"@vicons/fluent": "^0.13.0",
115112
"@vicons/ionicons4": "^0.13.0",
116113
"@vicons/ionicons5": "^0.13.0",
117-
"@vitejs/plugin-vue": "^6.0.0",
118-
"@vitest/coverage-v8": "^3.2.4",
114+
"@vitejs/plugin-vue": "^6.0.6",
115+
"@vitest/coverage-v8": "^4.1.5",
119116
"@vue/compiler-sfc": "^3.5.21",
120117
"@vue/server-renderer": "^3.5.21",
121118
"@vue/test-utils": "^2.4.6",
122119
"autoprefixer": "^10.4.21",
123120
"codesandbox": "^2.2.3",
124121
"cssnano": "^7.1.0",
125122
"deepmerge": "^4.3.1",
126-
"esbuild": "0.25.10",
127123
"eslint": "^9.6.0",
128124
"express": "^5.1.0",
129125
"fast-glob": "^3.3.1",
@@ -136,22 +132,22 @@
136132
"katex": "^0.16.28",
137133
"lint-staged": "^16.1.6",
138134
"marked": "^12.0.2",
135+
"oxc-transform": "^0.128.0",
139136
"prettier": "^3.6.2",
140137
"rimraf": "^6.0.1",
141-
"rollup": "^4.45.1",
142-
"rollup-plugin-esbuild": "^6.2.1",
143138
"superagent": "^10.2.2",
144139
"tsx": "^4.20.3",
145140
"typescript": "^5.9.2",
146141
"vfonts": "^0.0.3",
147-
"vite": "^7.0.4",
148-
"vitest": "^3.2.4",
142+
"vite": "^8.0.10",
143+
"vitest": "^4.1.5",
149144
"vue": "^3.5.21",
150145
"vue-router": "^4.5.1",
151146
"vue-tsc": "^3.0.7"
152147
},
153148
"pnpm": {
154149
"overrides": {
150+
"vite": "^8.0.10",
155151
"cssstyle": "5.2.1"
156152
},
157153
"peerDependencyRules": {

rollup.config.mjs

Lines changed: 0 additions & 110 deletions
This file was deleted.

scripts/post-build/gen-web-types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ export function genWebTypes(): void {
273273
case 'tab':
274274
componentPath = 'tabs'
275275
break
276+
case 'performant-ellipsis':
277+
componentPath = 'ellipsis'
278+
break
276279
}
277280
let docsPath: string | undefined
278281
do {

tsconfig.esbuild.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

vite.build.mts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import path from 'node:path'
2+
import process from 'node:process'
3+
import { babel } from '@rollup/plugin-babel'
4+
import { defineConfig } from 'vite'
5+
6+
const extensions = ['.mjs', '.js', '.json', '.ts', '.tsx']
7+
8+
const isDev = process.env.BUILD_ENV === 'development'
9+
10+
export default defineConfig({
11+
build: {
12+
emptyOutDir: false,
13+
lib: {
14+
entry: path.resolve(__dirname, 'src/index.ts'),
15+
name: 'naive',
16+
formats: ['es', 'umd'],
17+
fileName: (format) => {
18+
if (format === 'umd') {
19+
return isDev ? 'index.js' : 'index.prod.js'
20+
}
21+
return isDev ? 'index.mjs' : 'index.prod.mjs'
22+
}
23+
},
24+
outDir: 'dist',
25+
sourcemap: true,
26+
minify: !isDev,
27+
rolldownOptions: {
28+
external: ['vue'],
29+
output: {
30+
globals: {
31+
vue: 'Vue'
32+
},
33+
exports: 'named'
34+
},
35+
plugins: [
36+
babel({
37+
extensions,
38+
babelHelpers: 'bundled'
39+
})
40+
]
41+
}
42+
},
43+
oxc: {
44+
jsx: {
45+
runtime: 'classic',
46+
pragma: 'h',
47+
pragmaFrag: 'Fragment',
48+
development: false
49+
}
50+
},
51+
define: {
52+
__DEV__: JSON.stringify(isDev),
53+
'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production')
54+
}
55+
})

vite.config.mts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ const testExclude = isBuildTimeTest
1717

1818
export default defineConfig({
1919
root: __dirname,
20-
plugins: createDemoPlugin(),
20+
plugins: [
21+
...createDemoPlugin()
22+
],
2123
resolve: {
2224
// In production site build, we want to import naive-ui from node_modules
2325
alias:
@@ -73,11 +75,19 @@ export default defineConfig({
7375
},
7476
build: {
7577
outDir: 'site',
76-
rollupOptions: {
78+
rolldownOptions: {
7779
output: {
78-
manualChunks: {
79-
'grapheme-splitter': ['grapheme-splitter'],
80-
katex: ['katex']
80+
codeSplitting: {
81+
groups: [
82+
{
83+
name: 'grapheme-splitter',
84+
test: /grapheme-splitter/
85+
},
86+
{
87+
name: 'katex',
88+
test: /katex/
89+
}
90+
]
8191
}
8292
},
8393
plugins: [
@@ -87,10 +97,13 @@ export default defineConfig({
8797
]
8898
}
8999
},
90-
esbuild: {
91-
jsx: 'transform',
92-
jsxFactory: 'h',
93-
jsxFragment: 'Fragment'
100+
oxc: {
101+
jsx: {
102+
runtime: 'classic',
103+
pragma: 'h',
104+
pragmaFrag: 'Fragment',
105+
development: false
106+
}
94107
},
95108
test: {
96109
globals: true,

0 commit comments

Comments
 (0)