diff --git a/globals.d.ts b/globals.d.ts index 694b1c28f5..a5c2403ab9 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -7,3 +7,8 @@ declare module '*.vue' { const component: DefineComponent<{}, {}, any> & Plugin; export default component; } + +declare const TD_SITE_METADATA: { + dependencies: Record; + devDependencies: Record; +}; diff --git a/internal/utils/index.ts b/internal/utils/index.ts index 5d198442e5..dbb104ea42 100644 --- a/internal/utils/index.ts +++ b/internal/utils/index.ts @@ -2,4 +2,3 @@ export * from './src/paths'; export * from './src/package-json'; export * from './src/exec'; export * from './src/time'; -export * from './src/catalogs'; diff --git a/internal/utils/scripts/postinstall-tasks.ts b/internal/utils/scripts/postinstall-tasks.ts index 3226bbca05..626a7dbfd7 100644 --- a/internal/utils/scripts/postinstall-tasks.ts +++ b/internal/utils/scripts/postinstall-tasks.ts @@ -1,16 +1,5 @@ -import { parse } from 'yaml'; -import { readFileSync, writeFileSync } from 'fs'; import { joinWorkspaceRoot } from '../src/paths'; import { run } from '../src/exec'; -// 1. generate catalog.ts -const CATALOG_PATH = './internal/utils/src/catalogs.ts'; -const sourcePath = joinWorkspaceRoot('pnpm-workspace.yaml'); -const destPath = joinWorkspaceRoot(CATALOG_PATH); -const yamlContent = readFileSync(sourcePath, 'utf-8'); -const documents = parse(yamlContent); -writeFileSync(destPath, `export const catalogs = ${JSON.stringify(documents.catalogs, null, 2)}`); -run(`npx prettier --write ${CATALOG_PATH}`, { cwd: joinWorkspaceRoot() }); - -// 2. rollup.config.ts +// rollup.config.ts run('npx rollup -c rollup.config.ts', { cwd: joinWorkspaceRoot('internal/utils') }); diff --git a/internal/utils/src/catalogs.ts b/internal/utils/src/catalogs.ts deleted file mode 100644 index a22db0a4e0..0000000000 --- a/internal/utils/src/catalogs.ts +++ /dev/null @@ -1,119 +0,0 @@ -export const catalogs = { - bundle: { - '@babel/cli': '^7.22.9', - '@babel/core': '^7.22.9', - '@babel/helper-module-imports': '^7.22.9', - '@babel/plugin-transform-modules-commonjs': '^7.22.5', - '@babel/plugin-transform-object-assign': '^7.22.5', - '@babel/plugin-transform-runtime': '^7.22.9', - '@babel/preset-env': '^7.22.9', - '@rollup/plugin-babel': '^6.0.3', - '@rollup/plugin-commonjs': '^24.0.0', - '@rollup/plugin-json': '^6.0.0', - '@rollup/plugin-node-resolve': '^16.0.1', - '@rollup/plugin-replace': '^5.0.2', - '@rollup/plugin-typescript': '^12.1.2', - '@rollup/plugin-url': '^7.0.0', - '@vitejs/plugin-vue': '^5.2.1', - '@vitejs/plugin-vue-jsx': '^4.1.2', - '@vue/babel-plugin-jsx': '^1.4.0', - '@vue/compiler-sfc': '^3.3.4', - autoprefixer: '^10.4.14', - 'cross-env': '^7.0.3', - esbuild: '^0.14.54', - execa: '^8.0.1', - 'fs-extra': '^11.3.0', - glob: '^11.0.1', - less: '^4.1.3', - postcss: '^8.4.26', - rimraf: '^5.0.1', - rollup: '^2.79.1', - 'rollup-plugin-analyzer': '^4.0.0', - 'rollup-plugin-copy': '^3.4.0', - 'rollup-plugin-delete': '^2.0.0', - 'rollup-plugin-esbuild': '^4.10.3', - 'rollup-plugin-ignore-import': '^1.3.2', - 'rollup-plugin-multi-input': '^1.4.1', - 'rollup-plugin-postcss': '^4.0.2', - 'rollup-plugin-static-import': '^0.1.1', - 'rollup-plugin-styles': '^4.0.0', - 'rollup-plugin-terser': '^7.0.2', - 'rollup-plugin-vue': '^6.0.0', - tsdown: '^0.12.9', - tsx: '^4.19.2', - vite: '^6.2.0', - 'vite-plugin-pwa': '^0.21.2', - 'vite-plugin-tdoc': '^2.0.4', - }, - deps: { - '@babel/runtime': '^7.22.6', - '@popperjs/core': '^2.11.8', - clipboard: '^2.0.11', - dayjs: '^1.11.10', - 'highlight.js': '^11.9.0', - lodash: '^4.17.21', - 'lodash-es': '^4.17.21', - marked: '^12.0.1', - mitt: '^3.0.1', - nprogress: '^0.2.0', - raf: '^3.4.1', - sortablejs: '^1.15.0', - tinycolor2: '^1.6.0', - validator: '^13.9.0', - vue: '^3.3.9', - 'vue-router': '^4.2.4', - }, - docs: { - 'gray-matter': '^4.0.3', - 'marked-highlight': '^2.1.1', - prismjs: '^1.29.0', - semver: '^7.5.4', - 'workbox-precaching': '^6.6.0', - }, - lint: { - '@commitlint/cli': '^16.3.0', - '@commitlint/config-conventional': '^15.0.0', - '@typescript-eslint/eslint-plugin': '^4.33.0', - '@typescript-eslint/parser': '^4.33.0', - '@vue/eslint-config-typescript': '^10.0.0', - '@vue/tsconfig': '^0.7.0', - 'cz-git': '^1.7.0', - czg: '^1.7.0', - eslint: '^7.32.0', - 'eslint-config-prettier': '^8.8.0', - 'eslint-plugin-import': '^2.27.5', - 'eslint-plugin-prettier': '^4.2.1', - 'eslint-plugin-vue': '^8.7.1', - husky: '^7.0.4', - 'lint-staged': '^13.2.3', - prettier: '^2.8.1', - }, - tdesign: { - '@tdesign/site-components': '^0.17.0', - 'tdesign-icons-view': '^0.3.7', - 'tdesign-icons-vue-next': '^0.3.7', - 'tdesign-publish-cli': '^0.0.12', - 'tdesign-theme-generator': '^1.1.8', - }, - test: { - '@testing-library/dom': '^9.3.1', - '@vue/test-utils': '^2.4.1', - canvas: '^3.1.2', - 'dom-parser': '^1.1.5', - mockdate: '^3.0.5', - msw: '^1.2.3', - vitest: '^3.2.4', - 'vitest-fetch-mock': '^0.4.5', - }, - types: { - '@types/lodash-es': '^4.17.12', - '@types/node': '^22.5.1', - '@types/nprogress': '^0.2.3', - '@types/raf': '^3.4.0', - '@types/sortablejs': '^1.15.1', - '@types/tinycolor2': '^1.4.3', - '@types/validator': '^13.7.17', - typescript: '^5.7.3', - 'vue-tsc': '^2.2.4', - }, -}; diff --git a/packages/tdesign-vue-next-chat/site/package.json b/packages/tdesign-vue-next-chat/site/package.json index bf783d5e48..11b5a7877a 100644 --- a/packages/tdesign-vue-next-chat/site/package.json +++ b/packages/tdesign-vue-next-chat/site/package.json @@ -4,10 +4,10 @@ "type": "module", "scripts": { "start": "pnpm run dev", - "dev": "vite", - "build": "vite build", - "intranet": "vite build --mode intranet", - "preview": "vite build --mode preview && cp dist/index.html dist/404.html" + "dev": "vite --configLoader runner", + "build": "vite build --configLoader runner", + "intranet": "vite build --mode intranet --configLoader runner", + "preview": "vite build --mode preview --configLoader runner && cp dist/index.html dist/404.html" }, "author": "tdesign", "license": "MIT", diff --git a/packages/tdesign-vue-next-chat/site/plugin-doc/demo.js b/packages/tdesign-vue-next-chat/site/plugins/plugin-doc/demo.js similarity index 100% rename from packages/tdesign-vue-next-chat/site/plugin-doc/demo.js rename to packages/tdesign-vue-next-chat/site/plugins/plugin-doc/demo.js diff --git a/packages/tdesign-vue-next-chat/site/plugin-doc/index.js b/packages/tdesign-vue-next-chat/site/plugins/plugin-doc/index.js similarity index 100% rename from packages/tdesign-vue-next-chat/site/plugin-doc/index.js rename to packages/tdesign-vue-next-chat/site/plugins/plugin-doc/index.js diff --git a/packages/tdesign-vue-next-chat/site/plugin-doc/md-to-vue.js b/packages/tdesign-vue-next-chat/site/plugins/plugin-doc/md-to-vue.js similarity index 98% rename from packages/tdesign-vue-next-chat/site/plugin-doc/md-to-vue.js rename to packages/tdesign-vue-next-chat/site/plugins/plugin-doc/md-to-vue.js index e886b313c5..edd25e0801 100644 --- a/packages/tdesign-vue-next-chat/site/plugin-doc/md-to-vue.js +++ b/packages/tdesign-vue-next-chat/site/plugins/plugin-doc/md-to-vue.js @@ -3,7 +3,7 @@ import fs from 'fs'; import path from 'path'; import matter from 'gray-matter'; // TODO: 后续将这里修改为 mjs 后修改为 @tdesign/common 引入 -import { compileUsage, getGitTimestamp } from '../../../../packages/common/docs/compile'; +import { compileUsage, getGitTimestamp } from '../../../../../packages/common/docs/compile'; // TODO: 同上 import camelCase from 'lodash/camelCase'; import { joinPackagesRoot, joinProComponentsRoot } from '@tdesign/internal-utils'; diff --git a/packages/tdesign-vue-next-chat/site/plugin-doc/transforms.js b/packages/tdesign-vue-next-chat/site/plugins/plugin-doc/transforms.js similarity index 100% rename from packages/tdesign-vue-next-chat/site/plugin-doc/transforms.js rename to packages/tdesign-vue-next-chat/site/plugins/plugin-doc/transforms.js diff --git a/packages/tdesign-vue-next-chat/site/plugins/site-metadata/index.js b/packages/tdesign-vue-next-chat/site/plugins/site-metadata/index.js new file mode 100644 index 0000000000..ae909d0c4c --- /dev/null +++ b/packages/tdesign-vue-next-chat/site/plugins/site-metadata/index.js @@ -0,0 +1,36 @@ +import { parse } from 'yaml'; +import { readFileSync } from 'fs'; +import { joinWorkspaceRoot, tdesignVueNextPackageJson, tdesignVueNextChatPackageJson } from '@tdesign/internal-utils'; +export default function siteMetadata() { + const sourcePath = joinWorkspaceRoot('pnpm-workspace.yaml'); + const yamlContent = readFileSync(sourcePath, 'utf-8'); + const documents = parse(yamlContent); + return { + name: 'site-metadata', + config() { + return { + define: { + TD_SITE_METADATA: JSON.stringify({ + dependencies: { + vue: documents.catalogs.deps.vue, + less: documents.catalogs.bundle.less, + clipboard: documents.catalogs.deps.clipboard, + marked: documents.catalogs.deps.marked, + 'tdesign-vue-next': tdesignVueNextPackageJson.version, + 'tdesign-icons-vue-next': documents.catalogs.tdesign['tdesign-icons-vue-next'], + '@tdesign-vue-next/chat': tdesignVueNextChatPackageJson.version, + 'highlight.js': documents.catalogs.deps['highlight.js'], + 'marked-highlight': documents.catalogs.docs['marked-highlight'], + }, + devDependencies: { + vite: documents.catalogs.bundle.vite, + '@vue/compiler-sfc': documents.catalogs.bundle['@vue/compiler-sfc'], + '@vitejs/plugin-vue': documents.catalogs.bundle['@vitejs/plugin-vue'], + '@vitejs/plugin-vue-jsx': documents.catalogs.bundle['@vitejs/plugin-vue-jsx'], + }, + }), + }, + }; + }, + }; +} diff --git a/packages/tdesign-vue-next-chat/site/src/components/stackblitz/content.js b/packages/tdesign-vue-next-chat/site/src/components/stackblitz/content.js index d2421cbd7b..3f4d07deae 100644 --- a/packages/tdesign-vue-next-chat/site/src/components/stackblitz/content.js +++ b/packages/tdesign-vue-next-chat/site/src/components/stackblitz/content.js @@ -1,6 +1,3 @@ -import { tdesignVueNextChatPackageJson, tdesignVueNextPackageJson } from '@tdesign/internal-utils/package-json'; -import { catalogs } from '@tdesign/internal-utils/catalogs'; - export const htmlContent = `
@@ -72,21 +69,21 @@ export const packageJSONContent = JSON.stringify( serve: 'vite preview', }, dependencies: { - vue: catalogs.deps.vue, - less: catalogs.bundle.less, - clipboard: catalogs.deps.clipboard, - marked: catalogs.deps.marked, - 'tdesign-vue-next': tdesignVueNextPackageJson.version, - 'tdesign-icons-vue-next': catalogs.tdesign['tdesign-icons-vue-next'], - '@tdesign-vue-next/chat': tdesignVueNextChatPackageJson.version, - 'highlight.js': catalogs.deps['highlight.js'], - 'marked-highlight': catalogs.docs['marked-highlight'], + vue: TD_SITE_METADATA.dependencies.vue, + less: TD_SITE_METADATA.dependencies.less, + clipboard: TD_SITE_METADATA.dependencies.clipboard, + marked: TD_SITE_METADATA.dependencies.marked, + 'tdesign-vue-next': TD_SITE_METADATA.dependencies['tdesign-vue-next'], + 'tdesign-icons-vue-next': TD_SITE_METADATA.dependencies['tdesign-icons-vue-next'], + '@tdesign-vue-next/chat': TD_SITE_METADATA.dependencies['@tdesign-vue-next/chat'], + 'highlight.js': TD_SITE_METADATA.dependencies['highlight.js'], + 'marked-highlight': TD_SITE_METADATA.dependencies['marked-highlight'], }, devDependencies: { - vite: catalogs.bundle.vite, - '@vue/compiler-sfc': catalogs.bundle['@vue/compiler-sfc'], - '@vitejs/plugin-vue': catalogs.bundle['@vitejs/plugin-vue'], - '@vitejs/plugin-vue-jsx': catalogs.bundle['@vitejs/plugin-vue-jsx'], + vite: TD_SITE_METADATA.devDependencies.vite, + '@vue/compiler-sfc': TD_SITE_METADATA.devDependencies['@vue/compiler-sfc'], + '@vitejs/plugin-vue': TD_SITE_METADATA.devDependencies['@vitejs/plugin-vue'], + '@vitejs/plugin-vue-jsx': TD_SITE_METADATA.devDependencies['@vitejs/plugin-vue-jsx'], }, }, null, diff --git a/packages/tdesign-vue-next-chat/site/vite.config.ts b/packages/tdesign-vue-next-chat/site/vite.config.ts index c14027fdbd..84fdae8da3 100644 --- a/packages/tdesign-vue-next-chat/site/vite.config.ts +++ b/packages/tdesign-vue-next-chat/site/vite.config.ts @@ -1,14 +1,19 @@ import { defineConfig, searchForWorkspaceRoot } from 'vite'; import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; -import tDocPlugin from './plugin-doc'; import { joinPosix, joinComponentsRoot, joinTdesignVueNextRoot } from '@tdesign/internal-utils'; +import tDocPlugin from './plugins/plugin-doc'; +import siteMetadata from './plugins/site-metadata'; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; const publicPathMap: Record = { preview: '/', intranet: '/chat/', production: 'https://static.tdesign.tencent.com/chat/', }; +// eslint-disable-next-line no-underscore-dangle +const __dirname = dirname(fileURLToPath(import.meta.url)); export default defineConfig(({ mode }) => { return { @@ -31,7 +36,7 @@ export default defineConfig(({ mode }) => { allow: [searchForWorkspaceRoot(process.cwd())], }, }, - plugins: [vue(), vueJsx(), tDocPlugin()], + plugins: [vue(), vueJsx(), tDocPlugin(), siteMetadata()], optimizeDeps: { include: ['prismjs', 'prismjs/components/prism-bash.js'], }, diff --git a/packages/tdesign-vue-next/site/plugins/site-metadata/index.ts b/packages/tdesign-vue-next/site/plugins/site-metadata/index.ts new file mode 100644 index 0000000000..f6e19242c9 --- /dev/null +++ b/packages/tdesign-vue-next/site/plugins/site-metadata/index.ts @@ -0,0 +1,32 @@ +import { parse } from 'yaml'; +import { readFileSync } from 'fs'; +import { joinWorkspaceRoot, tdesignVueNextPackageJson } from '@tdesign/internal-utils'; +export default function siteMetadata() { + const sourcePath = joinWorkspaceRoot('pnpm-workspace.yaml'); + const yamlContent = readFileSync(sourcePath, 'utf-8'); + const documents = parse(yamlContent); + return { + name: 'site-metadata', + config() { + return { + define: { + TD_SITE_METADATA: JSON.stringify({ + dependencies: { + vue: documents.catalogs.deps.vue, + less: documents.catalogs.bundle.less, + 'tdesign-vue-next': tdesignVueNextPackageJson.version, + 'tdesign-icons-vue-next': documents.catalogs.tdesign['tdesign-icons-vue-next'], + dayjs: documents.catalogs.deps.dayjs, + }, + devDependencies: { + vite: documents.catalogs.bundle.vite, + '@vue/compiler-sfc': documents.catalogs.bundle['@vue/compiler-sfc'], + '@vitejs/plugin-vue': documents.catalogs.bundle['@vitejs/plugin-vue'], + '@vitejs/plugin-vue-jsx': documents.catalogs.bundle['@vitejs/plugin-vue-jsx'], + }, + }), + }, + }; + }, + }; +} diff --git a/packages/tdesign-vue-next/site/src/components/codeSandbox/content.ts b/packages/tdesign-vue-next/site/src/components/codeSandbox/content.ts index 74eb6edbfd..d148860cc8 100644 --- a/packages/tdesign-vue-next/site/src/components/codeSandbox/content.ts +++ b/packages/tdesign-vue-next/site/src/components/codeSandbox/content.ts @@ -1,6 +1,3 @@ -import { catalogs } from '@tdesign/internal-utils/catalogs'; -import { tdesignVueNextPackageJson } from '@tdesign/internal-utils/package-json'; - export const htmlContent = `
`; export const mainJsContent = ` @@ -72,11 +69,11 @@ export const packageJSONContent = (name: string) => { return { name: name, dependencies: { - vue: catalogs.deps.vue, - less: catalogs.bundle.less, - 'tdesign-vue-next': tdesignVueNextPackageJson.version, - 'tdesign-icons-vue-next': catalogs.tdesign['tdesign-icons-vue-next'], - dayjs: catalogs.deps.dayjs, + vue: TD_SITE_METADATA.dependencies.vue, + less: TD_SITE_METADATA.dependencies.less, + 'tdesign-vue-next': TD_SITE_METADATA.dependencies['tdesign-vue-next'], + 'tdesign-icons-vue-next': TD_SITE_METADATA.dependencies['tdesign-icons-vue-next'], + dayjs: TD_SITE_METADATA.dependencies.dayjs, }, devDependencies: { '@vue/cli-plugin-babel': '~4.5.0', diff --git a/packages/tdesign-vue-next/site/src/components/stackblitz/content.ts b/packages/tdesign-vue-next/site/src/components/stackblitz/content.ts index f238287922..1df0e1a227 100644 --- a/packages/tdesign-vue-next/site/src/components/stackblitz/content.ts +++ b/packages/tdesign-vue-next/site/src/components/stackblitz/content.ts @@ -1,6 +1,3 @@ -import { catalogs } from '@tdesign/internal-utils/catalogs'; -import { tdesignVueNextPackageJson } from '@tdesign/internal-utils/package-json'; - export const htmlContent = `
@@ -98,17 +95,17 @@ export const packageJSONContent = JSON.stringify( serve: 'vite preview', }, dependencies: { - vue: catalogs.deps.vue, - less: catalogs.bundle.less, - 'tdesign-vue-next': tdesignVueNextPackageJson.version, - 'tdesign-icons-vue-next': catalogs.tdesign['tdesign-icons-vue-next'], - dayjs: catalogs.deps.dayjs, + vue: TD_SITE_METADATA.dependencies.vue, + less: TD_SITE_METADATA.dependencies.less, + 'tdesign-vue-next': TD_SITE_METADATA.dependencies['tdesign-vue-next'], + 'tdesign-icons-vue-next': TD_SITE_METADATA.dependencies['tdesign-icons-vue-next'], + dayjs: TD_SITE_METADATA.dependencies.dayjs, }, devDependencies: { - vite: catalogs.bundle.vite, - '@vue/compiler-sfc': catalogs.bundle['@vue/compiler-sfc'], - '@vitejs/plugin-vue': catalogs.bundle['@vitejs/plugin-vue'], - '@vitejs/plugin-vue-jsx': catalogs.bundle['@vitejs/plugin-vue-jsx'], + vite: TD_SITE_METADATA.devDependencies.vite, + '@vue/compiler-sfc': TD_SITE_METADATA.devDependencies['@vue/compiler-sfc'], + '@vitejs/plugin-vue': TD_SITE_METADATA.devDependencies['@vitejs/plugin-vue'], + '@vitejs/plugin-vue-jsx': TD_SITE_METADATA.devDependencies['@vitejs/plugin-vue-jsx'], }, }, null, diff --git a/packages/tdesign-vue-next/site/vite.config.ts b/packages/tdesign-vue-next/site/vite.config.ts index 765bb9c935..cf4fa31b4a 100644 --- a/packages/tdesign-vue-next/site/vite.config.ts +++ b/packages/tdesign-vue-next/site/vite.config.ts @@ -10,6 +10,7 @@ import pwaConfig from './configs/pwa'; import changelog2Json from './plugins/changelog-to-json'; import tdDocToVue from './plugins/td-doc-to-vue'; +import siteMetadata from './plugins/site-metadata'; // eslint-disable-next-line no-underscore-dangle const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -37,6 +38,6 @@ export default defineConfig(({ mode }) => { 'tdesign-vue-next': joinComponentsRoot(), }, }, - plugins: [vue(), vueJsx(), tdDocToVue(), changelog2Json(), VitePWA(pwaConfig)], + plugins: [vue(), vueJsx(), tdDocToVue(), changelog2Json(), siteMetadata(), VitePWA(pwaConfig)], }; });