From 78f08551f221d0a1d9eee2e19c1d92a4db6618de Mon Sep 17 00:00:00 2001 From: Uyarn Date: Tue, 16 Sep 2025 01:34:03 +0800 Subject: [PATCH 1/2] feat: cos deploy multiple html --- site/vite.build.config.js | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 site/vite.build.config.js diff --git a/site/vite.build.config.js b/site/vite.build.config.js new file mode 100644 index 000000000..dac2b8d5a --- /dev/null +++ b/site/vite.build.config.js @@ -0,0 +1,77 @@ +import path from 'path'; +import { createHtmlPlugin } from 'vite-plugin-html'; +import { defineConfig } from 'vite'; +import { createVuePlugin } from 'vite-plugin-vue2'; +import ScriptSetup from 'unplugin-vue2-script-setup/vite'; +import changelog2Json from './plugins/changelog-to-json'; +import tdocPlugin from './plugins/plugin-tdoc'; +import router from './site.config.mjs'; +import fs from 'node:fs'; + +const outDir = '../_site'; + +// Rollup 4+ 的 tree-shaking 策略调整, 这里是为了让样式在站点构建正常 +const disableTreeShakingPlugin = (paths) => ({ + name: 'disable-treeshake', + transform(code, id) { + for (const path of paths) { + if (id.includes(path)) { + return { code, map: null, moduleSideEffects: 'no-treeshake' }; + } + } + }, +}); + +// https://vitejs.dev/config/ +export default ({ mode }) => { + return defineConfig({ + base: '/', + resolve: { + alias: { + '@': path.resolve(__dirname, '../'), + '@site': path.resolve(__dirname, './'), + '@docs': path.resolve(__dirname, './docs'), + '@components': path.resolve(__dirname, './src/components'), + '@common': path.resolve(__dirname, '../src/_common'), + 'tdesign-vue/es': path.resolve(__dirname, '../src'), + 'tdesign-vue': path.resolve(__dirname, '../src'), + vue: 'vue/dist/vue.esm.js', + }, + }, + build: { + outDir, + }, + plugins: [ + createVuePlugin({ + include: /(\.md|\.vue)$/, + jsx: true, + }), + tdocPlugin(), + changelog2Json(), + ScriptSetup({}), + disableTreeShakingPlugin(['style/']), + { + name: 'my-late-plugin', + enforce: 'post', + closeBundle() { + const templatePath = path.resolve(outDir, './index.html'); + const templateContent = fs.readFileSync(templatePath, 'utf-8'); + + function ensureDirectoryExistence(filePath) { + let dirname = path.dirname(filePath); + if (fs.existsSync(dirname)) return true; + ensureDirectoryExistence(dirname); + fs.mkdirSync(dirname); + } + + router.docs.forEach((parent) => { + parent.children.map((route) => { + const htmlPath = path.join(outDir, `${route.path}`); + if (ensureDirectoryExistence(htmlPath)) fs.writeFileSync(htmlPath, templateContent, 'utf-8'); + }); + }); + }, + }, + ], + }); +}; From d9a5bdbb3b0ad0778bdb5e1ebb3a1d7c2d544043 Mon Sep 17 00:00:00 2001 From: Uyarn Date: Tue, 16 Sep 2025 01:36:34 +0800 Subject: [PATCH 2/2] feat: cos deploy multiple html --- site/package.json | 2 +- site/vite.build.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/site/package.json b/site/package.json index 404a71bdc..f7ce78a8a 100644 --- a/site/package.json +++ b/site/package.json @@ -2,7 +2,7 @@ "name": "tdesign-vue-site", "scripts": { "dev": "vite", - "build": "vite build", + "build": "vite build --config vite.build.config.js", "preview": "vite preview", "build:preview": "vite build --mode preview", "build:intranet": "vite build --mode intranet" diff --git a/site/vite.build.config.js b/site/vite.build.config.js index dac2b8d5a..28e57f3d8 100644 --- a/site/vite.build.config.js +++ b/site/vite.build.config.js @@ -51,7 +51,7 @@ export default ({ mode }) => { ScriptSetup({}), disableTreeShakingPlugin(['style/']), { - name: 'my-late-plugin', + name: 'generate-multiple-entries', enforce: 'post', closeBundle() { const templatePath = path.resolve(outDir, './index.html');