vite-plugin-config-helper 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -1
- package/dist/esm/main.js +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -59,4 +59,22 @@ export default defineConfig((config: ConfigEnv): UserConfig => {
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
### 说明
|
|
62
|
-
|
|
62
|
+
插件运行后会更改已有的一些文件并添加一些文件,变动如下:
|
|
63
|
+
```md
|
|
64
|
+
├── build/
|
|
65
|
+
│ ├── config/ # 插件配置目录
|
|
66
|
+
│ │ ├── index.ts # 主配置文件
|
|
67
|
+
│ │ ├── plugins.ts # vite 默认配置文件
|
|
68
|
+
│ │ └── ep.ts # ElementPlus 配置文件,包括组件和样式自动导入等
|
|
69
|
+
├── src/
|
|
70
|
+
│ ├── components/ # 组件目录
|
|
71
|
+
│ │ └── FormBuilder.vue # 自用组件
|
|
72
|
+
│ ├── types/ # ts类型文件目录
|
|
73
|
+
│ │ ├── auto-imports.d.ts # unplugin-auto-import 配置生成
|
|
74
|
+
│ │ ├── components.d.ts # unplugin-vue-components 配置生成
|
|
75
|
+
│ │ └── ep.d.ts # ElementPlus 配置文件,包括组件和样式自动导入等
|
|
76
|
+
├── .env # vite-plugin-env-helper 添加的环境变量配置文件
|
|
77
|
+
├── eslint.config.ts # vite-plugin-env-helper 更改后的配置文件
|
|
78
|
+
├── vite.config.ts # 修改后的 vite 配置
|
|
79
|
+
└── package.json # 修改后的依赖
|
|
80
|
+
```
|
package/dist/esm/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"node:fs";import n from"node:fs";import*as o from"node:path";import*as t from"node:os";async function r(e){try{return await n.promises.access(e),!0}catch{return!1}}async function l(e,o){return await new Promise(((o,t)=>{let r="";n.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>t(e))).on("data",(e=>r+=e)).on("end",(()=>{o(r)}))}))}async function s(e,o,t){return await new Promise(((t,r)=>{n.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>r(e))).on("finish",(()=>t())).on("open",(function(){this.write(o),this.end()}))}))}function i(n={port:5173,baseUrl:"/api",proxyUrl:"http://192.168.0.193:9999",pluginEnvHelper:!0,pluginScanRoutes:!1,pluginElementPlus:!0}){return{name:"vite-plugin-config-helper",async configResolved(i){if(await r(o.resolve(process.cwd(),"./build/config/index.ts")))return;if(await r(o.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const p=await r(o.resolve(process.cwd(),"./.env")),c=["VITE_APP_BASE_URL","VITE_APP_PROXY_URL","VITE_APP_PORT"];if(!(c[0]in i.env))if(p){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_BASE_URL=${n.baseUrl}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_BASE_URL=${n.baseUrl}`);if(!(c[1]in i.env))if(await r(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_PROXY_URL=${n.proxyUrl}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_PROXY_URL=${n.proxyUrl}`);if(!(c[2]in i.env))if(await r(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_PORT=${n.port}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_PORT=${n.port}`);if(!await r(o.resolve(process.cwd(),"./build/config/plugins.ts"))){const e="import type { PluginsOption } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\nimport vueDevTools from 'vite-plugin-vue-devtools'"+t.EOL+(n.pluginScanRoutes?"import scanRoutes from 'vite-plugin-scan-routes'":"")+t.EOL+(n.pluginEnvHelper?"import { envHelper } from 'vite-plugin-env-helper'":"")+t.EOL+t.EOL+t.EOL+"export function createPlugins(): PluginsOption {\n const vitePlugins: PluginsOption = [\n vue(),\n vueJsx(),\n vueDevTools()"+(n.pluginScanRoutes?","+t.EOL+" scanRoutes()":"")+(n.pluginEnvHelper?","+t.EOL+" envHelper()"+t.EOL:"")+t.EOL+" ]\n return vitePlugins\n}\n";await s(o.resolve(process.cwd(),"./build/config/plugins.ts"),e)}if(n.pluginElementPlus){if(e.mkdirSync(process.cwd()+"/src/components",{recursive:!0}),!await r(o.resolve(process.cwd(),"./build/config/ep.ts"))){const e="import type { PluginsOption } from 'vite'\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport ElementPlus from 'unplugin-element-plus/vite'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'"+t.EOL+t.EOL+"export function createElementPlusPlugins(): PluginsOption {\n const vitePlugins: PluginsOption = [\n AutoImport({\n dts: 'src/types/auto-imports.d.ts',\n imports: ['vue'],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css' \n })\n ]\n }),\n Components({\n dts: 'src/types/components.d.ts',\n dirs: [ 'src/components' ],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css' \n })\n ]\n }),\n ElementPlus({\n useSource: true\n })"+t.EOL+" ]\n return vitePlugins\n}\n";await s(o.resolve(process.cwd(),"./build/config/ep.ts"),e)}const n="import type {\n AutocompleteProps,\n CascaderProps,\n CheckboxGroupProps,\n CheckboxProps,\n ColorPickerProps,\n DatePickerProps,\n InputNumberProps,\n InputProps,\n InputTagProps,\n MentionProps,\n OptionProps,\n RadioButtonProps,\n RadioGroupProps,\n RadioProps,\n RateProps,\n SelectProps,\n SelectV2Props,\n SliderProps,\n SwitchProps,\n TimePickerDefaultProps,\n TimeSelectProps,\n TransferProps,\n TreeProps,\n UploadProps,\n} from 'element-plus'\n\nexport {}\ndeclare global {\n /** ElDialog 主要属性 */\n type EpDialogAttrs = {\n visible: boolean\n title?: string\n width?: string\n height?: string\n center?: boolean\n showClose?: boolean\n closeOnClickModal?: boolean\n closeOnPressEscape?: boolean\n }\n /** ElementPlus 封装的动态表单组件的名称类型 (25个) */\n type FormName =\n | 'ElAutocomplete'\n | 'ElCascader'\n | 'ElCheckboxGroup'\n | 'ElCheckbox'\n | 'ElCheckboxButton'\n | 'ElColorPicker'\n | 'ElDatePicker'\n | 'ElTimePicker'\n | 'ElInput'\n | 'ElInputNumber'\n | 'ElInputTag'\n | 'ElMention'\n | 'ElRadioGroup'\n | 'ElRadio'\n | 'ElRadioButton'\n | 'ElRate'\n | 'ElSelect'\n | 'ElOption'\n | 'ElSelectV2'\n | 'ElSlider'\n | 'ElSwitch'\n | 'ElTimeSelect'\n | 'ElTransfer'\n | 'ElTreeSelect'\n | 'ElUpload'\n /** ElementPlus 封装的动态表单组件的属性类型 (25个) */\n type FormNameProps = {\n ElAutocomplete: AutocompleteProps\n ElCascader: CascaderProps\n ElCheckboxGroup: CheckboxGroupProps\n ElCheckbox: CheckboxProps\n ElCheckboxButton: CheckboxProps\n ElColorPicker: ColorPickerProps\n ElDatePicker: DatePickerProps\n ElTimePicker: TimePickerDefaultProps\n ElInput: InputProps\n ElInputNumber: InputNumberProps\n ElInputTag: InputTagProps\n ElMention: MentionProps\n ElRadioGroup: RadioGroupProps\n ElRadio: RadioProps\n ElRadioButton: RadioButtonProps\n ElRate: RateProps\n ElSelect: SelectProps\n ElOption: OptionProps\n ElSelectV2: SelectV2Props\n ElSlider: SliderProps\n ElSwitch: SwitchProps\n ElTimeSelect: TimeSelectProps\n ElTransfer: TransferProps\n ElTreeSelect: TreeProps & SelectProps\n ElUpload: UploadProps\n }\n /** ElementPlus 封装动态表单组件类型 */\n type FormBuilderItem<T> = {\n type: FormName\n label?: string\n prop?: keyof T\n span?: number\n props?: FormNameProps[FormName]\n value?: string\n }\n}\n";await s(o.resolve(process.cwd(),"./src/types/ep.d.ts"),n);const l='<script lang="ts">\nimport { defineComponent } from \'vue\'\n\nexport type FormBuilderInstance = InstanceType<ReturnType<typeof defineComponent>>\n<\/script>\n<script setup lang="ts" generic="T extends Record<string, unknown>">\nimport {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n type FormInstance,\n type FormRules,\n type FormValidateCallback,\n} from \'element-plus\'\nimport { useTemplateRef } from \'vue\'\n\ndefineProps<{\n items: FormBuilderItem<T>[]\n rules: FormRules<T>\n}>()\n\nconst form = defineModel<T>({\n required: true,\n default: {} as T,\n})\n\nconst instance = useTemplateRef<FormInstance>(\'formRef\')\n\nconst compMaps = {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n}\n\nfunction getComponent(type: unknown) {\n if (typeof type === \'string\') {\n return compMaps[type as FormName]\n }\n return type\n}\n\nfunction validate(callback?: FormValidateCallback) {\n instance.value?.validate(callback)\n}\n\nfunction resetFields() {\n instance.value?.resetFields()\n}\n\ndefineExpose({\n validate,\n resetFields,\n})\n<\/script>\n\n<template>\n <el-form :model="form" :rules="rules" label-width="auto" ref="formRef">\n <el-row>\n <el-col\n :xs="item.span || 24"\n :sm="item.span || 24"\n :md="item.span || 24"\n :lg="item.span || 24"\n :xl="item.span || 24"\n v-for="item in items"\n :key="item.prop"\n >\n <el-form-item style="padding: 0 30px;" :prop="item.prop as string" :label="item.label">\n <component :is="getComponent(item.type)" v-bind="item.props" v-model="form[item.prop!]">\n </component>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n</template>\n\n<style scoped></style>\n';await s(o.resolve(process.cwd(),"./src/components/FormBuilder.vue"),l)}if(!await r(o.resolve(process.cwd(),"./build/config/index.ts"))){const e="import {"+t.EOL+" defineConfig as defineAppConfig,"+t.EOL+" mergeConfig,"+t.EOL+" loadEnv,"+t.EOL+" type UserConfig,"+t.EOL+" type ConfigEnv,"+t.EOL+" type PluginOption"+t.EOL+"} from 'vite'"+t.EOL+"import { createPlugins } from './plugins'"+(n.pluginElementPlus?t.EOL+"import { createElementPlusPlugins } from './ep'"+t.EOL:t.EOL)+"import { fileURLToPath, URL } from 'node:url'"+t.EOL+t.EOL+"interface ConfigOptions {"+t.EOL+" overrides?: UserConfig"+t.EOL+"}"+t.EOL+t.EOL+"export function defineConfig<T extends ConfigOptions>(options: T) {"+t.EOL+" const { overrides } = options"+t.EOL+" return defineAppConfig("+t.EOL+" (config: ConfigEnv): UserConfig => {"+t.EOL+" const prefixes = ['VITE_']"+t.EOL+" const env = loadEnv(config.mode, process.cwd(), prefixes)"+t.EOL+" const commonConfig: UserConfig = {"+t.EOL+" envPrefix: prefixes,"+t.EOL+" root: process.cwd(),"+t.EOL+" base: '/',"+t.EOL+" publicDir: 'public',"+t.EOL+" server: {"+t.EOL+" host: '0.0.0.0',"+t.EOL+" port: Number(env.VITE_APP_PORT),"+t.EOL+" proxy: {"+t.EOL+" [env.VITE_APP_BASE_URL]: {"+t.EOL+" target: env.VITE_APP_PROXY_URL,"+t.EOL+" changeOrigin: true,"+t.EOL+" rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_URL}`), '')"+t.EOL+" }"+t.EOL+" }"+t.EOL+" },"+t.EOL+" resolve: {"+t.EOL+" alias: {"+t.EOL+" '@': fileURLToPath(new URL('../../src', import.meta.url))"+t.EOL+" }"+t.EOL+" },"+t.EOL+" plugins: ["+t.EOL+" ...createPlugins()"+(n.pluginElementPlus?","+t.EOL+" ...createElementPlusPlugins()"+t.EOL:t.EOL)+" ]"+t.EOL+" }"+t.EOL+" return overrides ? mergeConfig(commonConfig, overrides) : commonConfig"+t.EOL+" }"+t.EOL+" )"+t.EOL+"}"+t.EOL;await s(o.resolve(process.cwd(),"./build/config/index.ts"),e)}const a="import { defineConfig } from './build/config'"+t.EOL+t.EOL+"export default defineConfig({"+t.EOL+" overrides: {"+t.EOL+t.EOL+" }"+t.EOL+"})"+t.EOL;await s(o.resolve(process.cwd(),"./vite.config.ts"),a);const u=await l(o.resolve(process.cwd(),"./package.json"));let E="";n.pluginEnvHelper&&n.pluginScanRoutes?E=`"vite-plugin-env-helper": "^1.1.0",${t.EOL} "vite-plugin-scan-routes": "1.0.2",${t.EOL}`:n.pluginScanRoutes?E=`"vite-plugin-scan-routes": "1.0.2",${t.EOL}`:n.pluginEnvHelper&&(E=`"vite-plugin-env-helper": "^1.1.0",${t.EOL}`),n.pluginElementPlus&&(E+=` "unplugin-auto-import": "^20.0.0",${t.EOL} "unplugin-vue-components": "^29.0.0",${t.EOL} "unplugin-element-plus": "^0.10.0",${t.EOL}`);const m=u.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,E),d=n.pluginElementPlus?m.replace(/"dependencies": \s*\{/g,'"dependencies": {'+t.EOL+' "element-plus": "^2.10.7",'):m;await s(o.resolve(process.cwd(),"./package.json"),d)}}}export{i as configHelper};
|
|
1
|
+
import*as e from"node:fs";import n from"node:fs";import*as o from"node:path";import*as t from"node:os";async function r(e){try{return await n.promises.access(e),!0}catch{return!1}}async function l(e,o){return await new Promise(((o,t)=>{let r="";n.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>t(e))).on("data",(e=>r+=e)).on("end",(()=>{o(r)}))}))}async function s(e,o,t){return await new Promise(((t,r)=>{n.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>r(e))).on("finish",(()=>t())).on("open",(function(){this.write(o),this.end()}))}))}function i(n={port:5173,baseUrl:"/api",proxyUrl:"http://192.168.0.193:9999",pluginEnvHelper:!0,pluginScanRoutes:!1,pluginElementPlus:!0}){return{name:"vite-plugin-config-helper",async configResolved(i){if(await r(o.resolve(process.cwd(),"./build/config/index.ts")))return;if(await r(o.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const p=await r(o.resolve(process.cwd(),"./.env")),c=["VITE_APP_BASE_URL","VITE_APP_PROXY_URL","VITE_APP_PORT"];if(!(c[0]in i.env))if(p){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_BASE_URL=${n.baseUrl}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_BASE_URL=${n.baseUrl}`);if(!(c[1]in i.env))if(await r(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_PROXY_URL=${n.proxyUrl}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_PROXY_URL=${n.proxyUrl}`);if(!(c[2]in i.env))if(await r(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=t.EOL+`VITE_APP_PORT=${n.port}`,await s(o.resolve(process.cwd(),"./.env"),e)}else await s(o.resolve(process.cwd(),"./.env"),`VITE_APP_PORT=${n.port}`);if(!await r(o.resolve(process.cwd(),"./build/config/plugins.ts"))){const e="import type { PluginsOption } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\nimport vueDevTools from 'vite-plugin-vue-devtools'"+t.EOL+(n.pluginScanRoutes?"import scanRoutes from 'vite-plugin-scan-routes'":"")+t.EOL+(n.pluginEnvHelper?"import { envHelper } from 'vite-plugin-env-helper'":"")+t.EOL+t.EOL+t.EOL+"export function createPlugins(): PluginsOption {\n const vitePlugins: PluginsOption = [\n vue(),\n vueJsx(),\n vueDevTools()"+(n.pluginScanRoutes?","+t.EOL+" scanRoutes()":"")+(n.pluginEnvHelper?","+t.EOL+" envHelper()"+t.EOL:"")+t.EOL+" ]\n return vitePlugins\n}\n";await s(o.resolve(process.cwd(),"./build/config/plugins.ts"),e)}if(n.pluginElementPlus){if(e.mkdirSync(process.cwd()+"/src/components",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/types",{recursive:!0}),!await r(o.resolve(process.cwd(),"./build/config/ep.ts"))){const e="import type { PluginsOption } from 'vite'\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport ElementPlus from 'unplugin-element-plus/vite'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'"+t.EOL+t.EOL+"export function createElementPlusPlugins(): PluginsOption {\n const vitePlugins: PluginsOption = [\n AutoImport({\n dts: 'src/types/auto-imports.d.ts',\n imports: ['vue'],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css' \n })\n ]\n }),\n Components({\n dts: 'src/types/components.d.ts',\n dirs: [ 'src/components' ],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css' \n })\n ]\n }),\n ElementPlus({\n useSource: false\n })"+t.EOL+" ]\n return vitePlugins\n}\n";await s(o.resolve(process.cwd(),"./build/config/ep.ts"),e)}const n="import type {\n AutocompleteProps,\n CascaderProps,\n CheckboxGroupProps,\n CheckboxProps,\n ColorPickerProps,\n DatePickerProps,\n InputNumberProps,\n InputProps,\n InputTagProps,\n MentionProps,\n OptionProps,\n RadioButtonProps,\n RadioGroupProps,\n RadioProps,\n RateProps,\n SelectProps,\n SelectV2Props,\n SliderProps,\n SwitchProps,\n TimePickerDefaultProps,\n TimeSelectProps,\n TransferProps,\n TreeProps,\n UploadProps,\n} from 'element-plus'\n\nexport {}\ndeclare global {\n /** ElDialog 主要属性 */\n type EpDialogAttrs = {\n visible: boolean\n title?: string\n width?: string\n height?: string\n center?: boolean\n showClose?: boolean\n closeOnClickModal?: boolean\n closeOnPressEscape?: boolean\n }\n /** ElementPlus 封装的动态表单组件的名称类型 (25个) */\n type FormName =\n | 'ElAutocomplete'\n | 'ElCascader'\n | 'ElCheckboxGroup'\n | 'ElCheckbox'\n | 'ElCheckboxButton'\n | 'ElColorPicker'\n | 'ElDatePicker'\n | 'ElTimePicker'\n | 'ElInput'\n | 'ElInputNumber'\n | 'ElInputTag'\n | 'ElMention'\n | 'ElRadioGroup'\n | 'ElRadio'\n | 'ElRadioButton'\n | 'ElRate'\n | 'ElSelect'\n | 'ElOption'\n | 'ElSelectV2'\n | 'ElSlider'\n | 'ElSwitch'\n | 'ElTimeSelect'\n | 'ElTransfer'\n | 'ElTreeSelect'\n | 'ElUpload'\n /** ElementPlus 封装的动态表单组件的属性类型 (25个) */\n type FormNameProps = {\n ElAutocomplete: AutocompleteProps\n ElCascader: CascaderProps\n ElCheckboxGroup: CheckboxGroupProps\n ElCheckbox: CheckboxProps\n ElCheckboxButton: CheckboxProps\n ElColorPicker: ColorPickerProps\n ElDatePicker: DatePickerProps\n ElTimePicker: TimePickerDefaultProps\n ElInput: InputProps\n ElInputNumber: InputNumberProps\n ElInputTag: InputTagProps\n ElMention: MentionProps\n ElRadioGroup: RadioGroupProps\n ElRadio: RadioProps\n ElRadioButton: RadioButtonProps\n ElRate: RateProps\n ElSelect: SelectProps\n ElOption: OptionProps\n ElSelectV2: SelectV2Props\n ElSlider: SliderProps\n ElSwitch: SwitchProps\n ElTimeSelect: TimeSelectProps\n ElTransfer: TransferProps\n ElTreeSelect: TreeProps & SelectProps\n ElUpload: UploadProps\n }\n /** ElementPlus 封装动态表单组件类型 */\n type FormBuilderItem<T> = {\n type: FormName\n label?: string\n prop?: keyof T\n span?: number\n props?: FormNameProps[FormName]\n value?: string\n }\n}\n";await s(o.resolve(process.cwd(),"./src/types/ep.d.ts"),n);const l='<script lang="ts">\nimport { defineComponent } from \'vue\'\n\nexport type FormBuilderInstance = InstanceType<ReturnType<typeof defineComponent>>\n<\/script>\n<script setup lang="ts" generic="T extends Record<string, unknown>">\nimport {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n type FormInstance,\n type FormRules,\n type FormValidateCallback,\n} from \'element-plus\'\nimport { useTemplateRef } from \'vue\'\n\ndefineProps<{\n items: FormBuilderItem<T>[]\n rules: FormRules<T>\n}>()\n\nconst form = defineModel<T>({\n required: true,\n default: {} as T,\n})\n\nconst instance = useTemplateRef<FormInstance>(\'formRef\')\n\nconst compMaps = {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n}\n\nfunction getComponent(type: unknown) {\n if (typeof type === \'string\') {\n return compMaps[type as FormName]\n }\n return type\n}\n\nfunction validate(callback?: FormValidateCallback) {\n instance.value?.validate(callback)\n}\n\nfunction resetFields() {\n instance.value?.resetFields()\n}\n\ndefineExpose({\n validate,\n resetFields,\n})\n<\/script>\n\n<template>\n <el-form :model="form" :rules="rules" label-width="auto" ref="formRef">\n <el-row>\n <el-col\n :xs="item.span || 24"\n :sm="item.span || 24"\n :md="item.span || 24"\n :lg="item.span || 24"\n :xl="item.span || 24"\n v-for="item in items"\n :key="item.prop"\n >\n <el-form-item style="padding: 0 30px;" :prop="item.prop as string" :label="item.label">\n <component :is="getComponent(item.type)" v-bind="item.props" v-model="form[item.prop!]">\n </component>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n</template>\n\n<style scoped></style>\n';await s(o.resolve(process.cwd(),"./src/components/FormBuilder.vue"),l)}if(!await r(o.resolve(process.cwd(),"./build/config/index.ts"))){const e="import {"+t.EOL+" defineConfig as defineAppConfig,"+t.EOL+" mergeConfig,"+t.EOL+" loadEnv,"+t.EOL+" type UserConfig,"+t.EOL+" type ConfigEnv,"+t.EOL+" type PluginOption"+t.EOL+"} from 'vite'"+t.EOL+"import { createPlugins } from './plugins'"+(n.pluginElementPlus?t.EOL+"import { createElementPlusPlugins } from './ep'"+t.EOL:t.EOL)+"import { fileURLToPath, URL } from 'node:url'"+t.EOL+t.EOL+"interface ConfigOptions {"+t.EOL+" overrides?: UserConfig"+t.EOL+"}"+t.EOL+t.EOL+"export function defineConfig<T extends ConfigOptions>(options: T) {"+t.EOL+" const { overrides } = options"+t.EOL+" return defineAppConfig("+t.EOL+" (config: ConfigEnv): UserConfig => {"+t.EOL+" const prefixes = ['VITE_']"+t.EOL+" const env = loadEnv(config.mode, process.cwd(), prefixes)"+t.EOL+" const commonConfig: UserConfig = {"+t.EOL+" envPrefix: prefixes,"+t.EOL+" root: process.cwd(),"+t.EOL+" base: '/',"+t.EOL+" publicDir: 'public',"+t.EOL+" server: {"+t.EOL+" host: '0.0.0.0',"+t.EOL+" port: Number(env.VITE_APP_PORT),"+t.EOL+" proxy: {"+t.EOL+" [env.VITE_APP_BASE_URL]: {"+t.EOL+" target: env.VITE_APP_PROXY_URL,"+t.EOL+" changeOrigin: true,"+t.EOL+" rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_URL}`), '')"+t.EOL+" }"+t.EOL+" }"+t.EOL+" },"+t.EOL+" resolve: {"+t.EOL+" alias: {"+t.EOL+" '@': fileURLToPath(new URL('../../src', import.meta.url))"+t.EOL+" }"+t.EOL+" },"+t.EOL+" plugins: ["+t.EOL+" ...createPlugins()"+(n.pluginElementPlus?","+t.EOL+" ...createElementPlusPlugins()"+t.EOL:t.EOL)+" ]"+t.EOL+" }"+t.EOL+" return overrides ? mergeConfig(commonConfig, overrides) : commonConfig"+t.EOL+" }"+t.EOL+" )"+t.EOL+"}"+t.EOL;await s(o.resolve(process.cwd(),"./build/config/index.ts"),e)}const a="import { defineConfig } from './build/config'"+t.EOL+t.EOL+"export default defineConfig({"+t.EOL+" overrides: {"+t.EOL+t.EOL+" }"+t.EOL+"})"+t.EOL;await s(o.resolve(process.cwd(),"./vite.config.ts"),a);const u=await l(o.resolve(process.cwd(),"./package.json"));let E="";n.pluginEnvHelper&&n.pluginScanRoutes?E=`"vite-plugin-env-helper": "^1.1.0",${t.EOL} "vite-plugin-scan-routes": "1.0.2",${t.EOL}`:n.pluginScanRoutes?E=`"vite-plugin-scan-routes": "1.0.2",${t.EOL}`:n.pluginEnvHelper&&(E=`"vite-plugin-env-helper": "^1.1.0",${t.EOL}`),n.pluginElementPlus&&(E+=` "unplugin-auto-import": "^20.0.0",${t.EOL} "unplugin-vue-components": "^29.0.0",${t.EOL} "unplugin-element-plus": "^0.10.0",${t.EOL}`);const m=u.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,E),d=n.pluginElementPlus?m.replace(/"dependencies": \s*\{/g,'"dependencies": {'+t.EOL+' "element-plus": "^2.10.7",'):m;await s(o.resolve(process.cwd(),"./package.json"),d)}}}export{i as configHelper};
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-config-helper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "把 vite.config.ts 配置进行逻辑拆分,并整合一些常用插件,如 element-plus 自动导入组件样式配置的相关插件",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"typescript",
|
|
8
8
|
"vite",
|
|
9
9
|
"vite.config.ts",
|
|
10
|
-
"plugin"
|
|
10
|
+
"plugin",
|
|
11
|
+
"element-plus"
|
|
11
12
|
],
|
|
12
13
|
"type": "module",
|
|
13
14
|
"main": "dist/esm/main.js",
|