From 185c6047cc2f23c2f1baa4099c2d065d76c06eb3 Mon Sep 17 00:00:00 2001 From: qiuchengw Date: Thu, 25 Sep 2025 11:26:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81build=20lib=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=9B=BA=E5=AE=9A=E6=96=87=E4=BB=B6=E5=90=8D=E7=9A=84=E5=8C=85?= =?UTF-8?q?=E5=92=8C=E5=AF=BC=E5=87=BAjs=20style=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E6=B1=A1=E6=9F=93=E5=BA=94=E7=94=A8=E5=B1=82=E7=9A=84?= =?UTF-8?q?style?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- scripts/generate-css-export.js | 39 ++++++++++++++++++++++++++++++++++ vite.config.lib.ts | 19 ++++++++++++++++- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 scripts/generate-css-export.js diff --git a/package.json b/package.json index 0582cbd..28dea49 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "dev:demo": "vite", "build": "vue-tsc -b && vite build", "build:demo": "vue-tsc -b && vite build", - "build:lib": "vite build --config vite.config.lib.ts", + "build:lib": "vite build --config vite.config.lib.ts && node scripts/generate-css-export.js", "preview": "vite preview", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix", "lint:check": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts", diff --git a/scripts/generate-css-export.js b/scripts/generate-css-export.js new file mode 100644 index 0000000..2551c8a --- /dev/null +++ b/scripts/generate-css-export.js @@ -0,0 +1,39 @@ +#!/usr/bin/env node +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +// ES模块中的__dirname等价物 +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +// 构建后生成CSS导出文件 +function generateCssExport() { + const distDir = path.resolve(__dirname, '../npm-package/dist') + const cssFile = path.join(distDir, 'assets/jordium-gantt-vue3.css') + const outputFile = path.join(distDir, 'jordium-gantt-vue3-styles.js') + + try { + if (fs.existsSync(cssFile)) { + const cssContent = fs.readFileSync(cssFile, 'utf8') + + // 生成JS导出文件 + const jsContent = `// CSS styles for jordium-gantt-vue3 +// Auto-generated file - do not edit manually +export const ganttStyles = ${JSON.stringify(cssContent)} +export default ganttStyles +` + + fs.writeFileSync(outputFile, jsContent, 'utf8') + console.log('✅ Generated CSS export file:', outputFile) + } else { + console.warn('⚠️ CSS file not found:', cssFile) + } + } catch (error) { + console.error('❌ Failed to generate CSS export:', error) + process.exit(1) + } +} + +// 运行 +generateCssExport() diff --git a/vite.config.lib.ts b/vite.config.lib.ts index ddee0bb..d07bea3 100644 --- a/vite.config.lib.ts +++ b/vite.config.lib.ts @@ -1,9 +1,19 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' +// 生成CSS导出文件的插件 +const generateCssExportPlugin = () => { + return { + name: 'generate-css-export', + generateBundle() { + // 此插件将在构建后脚本中处理 + } + } +} + // https://vite.dev/config/ export default defineConfig({ - plugins: [vue()], + plugins: [vue(), generateCssExportPlugin()], build: { outDir: './npm-package/dist', emptyOutDir: true, @@ -21,6 +31,13 @@ export default defineConfig({ globals: { vue: 'Vue', }, + // 禁用文件名哈希,生成固定文件名 + entryFileNames: 'jordium-gantt-vue3.[format].js', + chunkFileNames: 'chunks/[name].js', + assetFileNames: 'assets/[name].[ext]', + // 禁用代码分割,将所有代码打包到一个文件中 + manualChunks: undefined, + inlineDynamicImports: true }, }, },