import { build } from "vite" import vue from "@vitejs/plugin-vue" import path from "path" import dts from "vite-plugin-dts" import { replaceCodePlugin } from "vite-plugin-replace"; import fs from "fs-extra"; // import libInjectCss from "./libInjectCss" import _ from "lodash" import { getOutput, getPath, getPkgs } from "@princess-ui/share"; export default function (prefix: string, component: string, name: string, opts?: {}) { const isExistVue = fs.pathExistsSync(`components/${component}/index.vue`) return build({ logLevel: "error", plugins: [ vue({ isProduction: true }), dts({ entryRoot: `components/${component}`, tsConfigFilePath: getPath("tsconfig.json"), outputDir: getOutput(`lib/${component}`), cleanVueFileName: true, // include: [isExistVue?`components/${component}/index.vue`:`components/${component}/${component}.vue`, `components/${component}/index.ts`], include: [`components/${component}`], staticImport: true, }), replaceCodePlugin({ replacements: [ { from: "@princess-ui/components", to: "princess-ui/lib", }, // 考虑使用gulp进行替换,做成element类似的结构 // { // from: /\@princess\-ui\/theme-chalk\/src\/(.*?)\.scss/i, // to: "princess-ui/theme-chalk/$1.css" // } ], }), // libInjectCss(), ], build: { outDir: getOutput("lib"), cssCodeSplit: false, emptyOutDir: false, lib: { entry: path.resolve(__dirname, `../components/${component}/index.ts`), name: name, formats: ["es", "umd"], fileName: format => `${component}/index${format == 'es' ? '' : '.umd'}.js`, }, rollupOptions: { external: id => { if (/^vue/.test(id)) { return true } if (/^princess-ui/.test(id)) { return true } return false }, output: [ { format: "es", assetFileNames(chunkInfo) { if (chunkInfo.name == "style.css") { return `${component}/style.css` } }, }, { exports: "named", name: name, format: "umd", globals: (id: string) => { if (/^vue/.test(id)) { return "Vue" } if (new RegExp(/^princess-ui\/lib/).test(id)) { let str = id.replace(/^princess\-ui\/lib\//, prefix) str = str.slice(0, 2) + str.slice(2)[0].toUpperCase() + str.slice(3) return str } }, }, ], }, }, }) }