vite-plugin-config-helper 0.1.6 → 0.1.8
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/LICENSE +21 -21
- package/README.md +84 -83
- package/dist/esm/main.js +1 -1
- package/package.json +6 -6
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025-PRESENT TopFiveGao <https://github.com/topfivegao>
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-PRESENT TopFiveGao <https://github.com/topfivegao>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,83 +1,84 @@
|
|
|
1
|
-
# vite-plugin-config-helper
|
|
2
|
-
|
|
3
|
-
一个用于更改默认 vite.config.ts 文件,将配置逻辑分离到 build 目录文件的插件。
|
|
4
|
-
|
|
5
|
-
如果项目存在 build 目录,且包含 index.ts 或者 plugins.ts 文件, 则插件将不会更改 vite.config.ts 文件。
|
|
6
|
-
|
|
7
|
-
可以利用这个插件来整合之前写的 <span style="color: darkcyan;">vite-plugin-env-helper</span> 和 <span style="color: darkcyan;">vite-plugin-scan-routes</span> 插件,还可以拓展其他配置,例如 element-plus 组件,来快速搭建项目框架。
|
|
8
|
-
|
|
9
|
-
该插件只在项目初始搭建时起作用,搭建完成后会自动删除自身,所以不需要关注本库的大小及优化!
|
|
10
|
-
|
|
11
|
-
运行逻辑:
|
|
12
|
-
|
|
13
|
-
首先会判断在项目根目录下是否存在 /build/config/index.ts 或 /build/config/plugin.ts 文件,不存在则继续执行,
|
|
14
|
-
|
|
15
|
-
然后判断是否存在 .env 文件,并在该文件中以 VITE_APP_BASE_URL VITE_APP_PROXY_URL VITE_APP_PORT 这三个键承接插件传入参数 baseUrl proxyUrl port 。
|
|
16
|
-
|
|
17
|
-
在这个插件的开发过程中,不断添加的参数增加了复杂度,先是整合自己的两个插件,然后又想加 element-plus tailwindcss 等,边界的扩大导致了使用的复杂,最后决定整合 element-plus 然后稳定下来,这就已经可以实现比较全面的基础模板了。
|
|
18
|
-
## 安装
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm i -D vite-plugin-config-helper
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## 使用
|
|
25
|
-
|
|
26
|
-
### 配置 <span style="color: darkcyan;">__vite.config.ts__</span>
|
|
27
|
-
|
|
28
|
-
1. 利用vue 或 vite 官方脚手架创建 vue 项目后,在 vite.config.ts 添加以下内容,然后执行命令 vite 。
|
|
29
|
-
|
|
30
|
-
2. 检查 package.json 文件,重新安装依赖。
|
|
31
|
-
|
|
32
|
-
3. 经过上面的操作,本插件会帮我们改造 vite.config.ts 配置文件,并将一些插件配置(element-plus)拆分到 /build/config 目录中,不用每次都去官网复制粘贴,能快速初始化一个干净的项目。
|
|
33
|
-
```ts
|
|
34
|
-
import vue from '@vitejs/plugin-vue'
|
|
35
|
-
import { defineConfig, type UserConfig, type ConfigEnv } from 'vite'
|
|
36
|
-
import {configHelper} from 'vite-plugin-config-helper'
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
export default defineConfig((config: ConfigEnv): UserConfig => {
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
plugins: [
|
|
43
|
-
vue(),
|
|
44
|
-
// 路由插件是自用的,感兴趣可自行查询,实现了 unplugin-vue-router 部分功能:约定式路由。
|
|
45
|
-
// element-plus 最好是 2.10.5 以上版本
|
|
46
|
-
// configHelper() // 默认值如下
|
|
47
|
-
configHelper({
|
|
48
|
-
port: 5173,
|
|
49
|
-
baseUrl: '/api',
|
|
50
|
-
proxyUrl: 'http://192.168.0.193:9999' ,
|
|
51
|
-
pluginEnvHelper: true,
|
|
52
|
-
pluginScanRoutes: false,
|
|
53
|
-
pluginElementPlus: true
|
|
54
|
-
})
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 说明
|
|
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
|
-
│ ├── hooks/ # hook 目录
|
|
77
|
-
│ │ └── color.ts # ElementPlus 动态更改主题色
|
|
78
|
-
├── .env # vite-plugin-env-helper 添加的环境变量配置文件
|
|
79
|
-
├── eslint.config.ts # vite-plugin-env-helper 更改后的配置文件
|
|
80
|
-
├── vite.config.ts # 修改后的 vite 配置
|
|
81
|
-
└── package.json # 修改后的依赖
|
|
82
|
-
```
|
|
83
|
-
|
|
1
|
+
# vite-plugin-config-helper
|
|
2
|
+
|
|
3
|
+
一个用于更改默认 vite.config.ts 文件,将配置逻辑分离到 build 目录文件的插件。
|
|
4
|
+
|
|
5
|
+
如果项目存在 build 目录,且包含 index.ts 或者 plugins.ts 文件, 则插件将不会更改 vite.config.ts 文件。
|
|
6
|
+
|
|
7
|
+
可以利用这个插件来整合之前写的 <span style="color: darkcyan;">vite-plugin-env-helper</span> 和 <span style="color: darkcyan;">vite-plugin-scan-routes</span> 插件,还可以拓展其他配置,例如 element-plus 组件,来快速搭建项目框架。
|
|
8
|
+
|
|
9
|
+
该插件只在项目初始搭建时起作用,搭建完成后会自动删除自身,所以不需要关注本库的大小及优化!
|
|
10
|
+
|
|
11
|
+
运行逻辑:
|
|
12
|
+
|
|
13
|
+
首先会判断在项目根目录下是否存在 /build/config/index.ts 或 /build/config/plugin.ts 文件,不存在则继续执行,
|
|
14
|
+
|
|
15
|
+
然后判断是否存在 .env 文件,并在该文件中以 VITE_APP_BASE_URL VITE_APP_PROXY_URL VITE_APP_PORT 这三个键承接插件传入参数 baseUrl proxyUrl port 。
|
|
16
|
+
|
|
17
|
+
在这个插件的开发过程中,不断添加的参数增加了复杂度,先是整合自己的两个插件,然后又想加 element-plus tailwindcss 等,边界的扩大导致了使用的复杂,最后决定整合 element-plus 然后稳定下来,这就已经可以实现比较全面的基础模板了。
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm i -D vite-plugin-config-helper
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 使用
|
|
25
|
+
|
|
26
|
+
### 配置 <span style="color: darkcyan;">__vite.config.ts__</span>
|
|
27
|
+
|
|
28
|
+
1. 利用vue 或 vite 官方脚手架创建 vue 项目后,在 vite.config.ts 添加以下内容,然后执行命令 vite 。
|
|
29
|
+
|
|
30
|
+
2. 检查 package.json 文件,重新安装依赖。
|
|
31
|
+
|
|
32
|
+
3. 经过上面的操作,本插件会帮我们改造 vite.config.ts 配置文件,并将一些插件配置(element-plus)拆分到 /build/config 目录中,不用每次都去官网复制粘贴,能快速初始化一个干净的项目。
|
|
33
|
+
```ts
|
|
34
|
+
import vue from '@vitejs/plugin-vue'
|
|
35
|
+
import { defineConfig, type UserConfig, type ConfigEnv } from 'vite'
|
|
36
|
+
import {configHelper} from 'vite-plugin-config-helper'
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
export default defineConfig((config: ConfigEnv): UserConfig => {
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
plugins: [
|
|
43
|
+
vue(),
|
|
44
|
+
// 路由插件是自用的,感兴趣可自行查询,实现了 unplugin-vue-router 部分功能:约定式路由。
|
|
45
|
+
// element-plus 最好是 2.10.5 以上版本
|
|
46
|
+
// configHelper() // 默认值如下
|
|
47
|
+
configHelper({
|
|
48
|
+
port: 5173,
|
|
49
|
+
baseUrl: '/api',
|
|
50
|
+
proxyUrl: 'http://192.168.0.193:9999' ,
|
|
51
|
+
pluginEnvHelper: true,
|
|
52
|
+
pluginScanRoutes: false,
|
|
53
|
+
pluginElementPlus: true
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 说明
|
|
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
|
+
│ ├── hooks/ # hook 目录
|
|
77
|
+
│ │ └── color.ts # ElementPlus 动态更改主题色
|
|
78
|
+
├── .env # vite-plugin-env-helper 添加的环境变量配置文件
|
|
79
|
+
├── eslint.config.ts # vite-plugin-env-helper 更改后的配置文件
|
|
80
|
+
├── vite.config.ts # 修改后的 vite 配置
|
|
81
|
+
└── package.json # 修改后的依赖
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
本插件默认会将依赖的 unplugin-auto-import unplugin-vue-components unplugin-element-plus element-plus 库的最新版本写入 package.json 文件中, 因此这些依赖更新时,插件也应该更新。更新版本时插件源码位置为 500 和 509 行。
|
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 r from"node:os";async function t(e){try{return await n.promises.access(e),!0}catch{return!1}}async function l(e,o){return await new Promise(((o,r)=>{let t="";n.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>r(e))).on("data",(e=>t+=e)).on("end",(()=>{o(t)}))}))}async function i(e,o,r){return await new Promise(((r,t)=>{n.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>t(e))).on("finish",(()=>r())).on("open",(function(){this.write(o),this.end()}))}))}function s(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(s){if(await t(o.resolve(process.cwd(),"./build/config/index.ts")))return;if(await t(o.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const p=await t(o.resolve(process.cwd(),"./.env")),c=["VITE_APP_BASE_URL","VITE_APP_PROXY_URL","VITE_APP_PORT"];if(!(c[0]in s.env))if(p){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_BASE_URL=${n.baseUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_BASE_URL=${n.baseUrl}`);if(!(c[1]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PROXY_URL=${n.proxyUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PROXY_URL=${n.proxyUrl}`);if(!(c[2]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PORT=${n.port}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PORT=${n.port}`);if(!await t(o.resolve(process.cwd(),"./build/config/plugins.ts"))){const e="import type { PluginOption } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\nimport vueDevTools from 'vite-plugin-vue-devtools'"+r.EOL+(n.pluginScanRoutes?"import scanRoutes from 'vite-plugin-scan-routes'":"")+r.EOL+(n.pluginEnvHelper?"import { envHelper } from 'vite-plugin-env-helper'":"")+r.EOL+r.EOL+r.EOL+"export function createPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\n vue(),\n vueJsx(),\n vueDevTools()"+(n.pluginScanRoutes?","+r.EOL+" scanRoutes()":"")+(n.pluginEnvHelper?","+r.EOL+" envHelper()"+r.EOL:"")+r.EOL+" ]\n return vitePlugins\n}\n";await i(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/hooks",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/types",{recursive:!0}),!await t(o.resolve(process.cwd(),"./build/config/ep.ts"))){const e="import type { PluginOption } 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'"+r.EOL+r.EOL+"export function createElementPlusPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\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 })"+r.EOL+" ]\n return vitePlugins\n}\n";await i(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 i(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 i(o.resolve(process.cwd(),"./src/components/FormBuilder.vue"),l)}if(!await t(o.resolve(process.cwd(),"./src/hooks/color.ts"))){const e="import { onBeforeMount } from 'vue'\n\nfunction lightColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const lightRgb = rgb.map((value) =>\n parseInt(String(value + (255 - value) * (percentFrom1To100 / 100))),\n )\n return '#' + lightRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction darkColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const darkRgb = rgb.map((value) => parseInt(String(value * (1 - percentFrom1To100 / 100))))\n return '#' + darkRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction updateThemeColor(colorWithHash: string = '#409eff') {\n const colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/\n if (!colorRegex.test(colorWithHash)) {\n console.error('color must be a hex string')\n return\n }\n if (colorWithHash.length === 4) {\n colorWithHash = ['#']\n .concat(\n colorWithHash\n .slice(1)\n .split('')\n .map((item) => item + item),\n )\n .join('')\n }\n const el = document.documentElement\n const colorNames = [\n '--el-color-primary',\n '--el-color-primary-light-3',\n '--el-color-primary-light-5',\n '--el-color-primary-light-7',\n '--el-color-primary-light-8',\n '--el-color-primary-light-9',\n '--el-color-primary-dark-2',\n ]\n for (const item of colorNames) {\n const tail = item.slice(-1)\n if (tail === 'y') {\n el.style.setProperty(item, colorWithHash)\n } else if (tail === '2') {\n el.style.setProperty(item, darkColor(colorWithHash, Number(tail + '0')))\n } else {\n el.style.setProperty(item, lightColor(colorWithHash, Number(tail + '0')))\n }\n }\n}\n\nexport function useElementPlusTheme(colorWithHash?: string) {\n onBeforeMount(() => {\n updateThemeColor(colorWithHash)\n })\n return { updateThemeColor }\n}\n";await i(o.resolve(process.cwd(),"./src/hooks/color.ts"),e)}if(!await t(o.resolve(process.cwd(),"./build/config/index.ts"))){const e="import {"+r.EOL+" defineConfig as defineAppConfig,"+r.EOL+" mergeConfig,"+r.EOL+" loadEnv,"+r.EOL+" type UserConfig,"+r.EOL+" type ConfigEnv,"+r.EOL+" type PluginOption"+r.EOL+"} from 'vite'"+r.EOL+"import { createPlugins } from './plugins'"+(n.pluginElementPlus?r.EOL+"import { createElementPlusPlugins } from './ep'"+r.EOL:r.EOL)+"import { fileURLToPath, URL } from 'node:url'"+r.EOL+r.EOL+"interface ConfigOptions {"+r.EOL+" overrides?: UserConfig"+r.EOL+"}"+r.EOL+r.EOL+"export function defineConfig<T extends ConfigOptions>(options: T) {"+r.EOL+" const { overrides } = options"+r.EOL+" return defineAppConfig("+r.EOL+" (config: ConfigEnv): UserConfig => {"+r.EOL+" const prefixes = ['VITE_']"+r.EOL+" const env = loadEnv(config.mode, process.cwd(), prefixes)"+r.EOL+" const commonConfig: UserConfig = {"+r.EOL+" envPrefix: prefixes,"+r.EOL+" root: process.cwd(),"+r.EOL+" base: '/',"+r.EOL+" publicDir: 'public',"+r.EOL+" server: {"+r.EOL+" host: '0.0.0.0',"+r.EOL+" port: Number(env.VITE_APP_PORT),"+r.EOL+" proxy: {"+r.EOL+" [env.VITE_APP_BASE_URL]: {"+r.EOL+" target: env.VITE_APP_PROXY_URL,"+r.EOL+" changeOrigin: true,"+r.EOL+" rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_URL}`), '')"+r.EOL+" }"+r.EOL+" }"+r.EOL+" },"+r.EOL+" resolve: {"+r.EOL+" alias: {"+r.EOL+" '@': fileURLToPath(new URL('../../src', import.meta.url))"+r.EOL+" }"+r.EOL+" },"+r.EOL+" plugins: ["+r.EOL+" ...createPlugins()"+(n.pluginElementPlus?","+r.EOL+" ...createElementPlusPlugins()"+r.EOL:r.EOL)+" ]"+r.EOL+" }"+r.EOL+" return overrides ? mergeConfig(commonConfig, overrides) : commonConfig"+r.EOL+" }"+r.EOL+" )"+r.EOL+"}"+r.EOL;await i(o.resolve(process.cwd(),"./build/config/index.ts"),e)}const a="import { defineConfig } from './build/config'"+r.EOL+r.EOL+"export default defineConfig({"+r.EOL+" overrides: {"+r.EOL+r.EOL+" }"+r.EOL+"})"+r.EOL;await i(o.resolve(process.cwd(),"./vite.config.ts"),a);const u=await l(o.resolve(process.cwd(),"./package.json"));let m="";n.pluginEnvHelper&&n.pluginScanRoutes?m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL} "vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginScanRoutes?m=`"vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginEnvHelper&&(m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL}`),n.pluginElementPlus&&(m+=` "unplugin-auto-import": "^20.1.0",${r.EOL} "unplugin-vue-components": "^29.0.0",${r.EOL} "unplugin-element-plus": "^0.10.0",${r.EOL}`);const E=u.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,m),d=n.pluginElementPlus?E.replace(/"dependencies": \s*\{/g,'"dependencies": {'+r.EOL+' "element-plus": "^2.11.1",'):E;await i(o.resolve(process.cwd(),"./package.json"),d)}}}export{s as configHelper};
|
|
1
|
+
import*as e from"node:fs";import n from"node:fs";import*as o from"node:path";import*as r from"node:os";async function t(e){try{return await n.promises.access(e),!0}catch{return!1}}async function l(e,o){return await new Promise(((o,r)=>{let t="";n.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>r(e))).on("data",(e=>t+=e)).on("end",(()=>{o(t)}))}))}async function i(e,o,r){return await new Promise(((r,t)=>{n.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>t(e))).on("finish",(()=>r())).on("open",(function(){this.write(o),this.end()}))}))}function s(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(s){if(await t(o.resolve(process.cwd(),"./build/config/index.ts")))return;if(await t(o.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const p=await t(o.resolve(process.cwd(),"./.env")),c=["VITE_APP_BASE_URL","VITE_APP_PROXY_URL","VITE_APP_PORT"];if(!(c[0]in s.env))if(p){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_BASE_URL=${n.baseUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_BASE_URL=${n.baseUrl}`);if(!(c[1]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PROXY_URL=${n.proxyUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PROXY_URL=${n.proxyUrl}`);if(!(c[2]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PORT=${n.port}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PORT=${n.port}`);if(!await t(o.resolve(process.cwd(),"./build/config/plugins.ts"))){const e="import type { PluginOption } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\nimport vueDevTools from 'vite-plugin-vue-devtools'"+r.EOL+(n.pluginScanRoutes?"import scanRoutes from 'vite-plugin-scan-routes'":"")+r.EOL+(n.pluginEnvHelper?"import { envHelper } from 'vite-plugin-env-helper'":"")+r.EOL+r.EOL+r.EOL+"export function createPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\n vue(),\n vueJsx(),\n vueDevTools()"+(n.pluginScanRoutes?","+r.EOL+" scanRoutes()":"")+(n.pluginEnvHelper?","+r.EOL+" envHelper()"+r.EOL:"")+r.EOL+" ]\n return vitePlugins\n}\n";await i(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/hooks",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/types",{recursive:!0}),!await t(o.resolve(process.cwd(),"./build/config/ep.ts"))){const e="import type { PluginOption } 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'"+r.EOL+r.EOL+"export function createElementPlusPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\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 })"+r.EOL+" ]\n return vitePlugins\n}\n";await i(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 i(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 i(o.resolve(process.cwd(),"./src/components/FormBuilder.vue"),l)}if(!await t(o.resolve(process.cwd(),"./src/hooks/color.ts"))){const e="import { onBeforeMount } from 'vue'\n\nfunction lightColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const lightRgb = rgb.map((value) =>\n parseInt(String(value + (255 - value) * (percentFrom1To100 / 100))),\n )\n return '#' + lightRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction darkColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const darkRgb = rgb.map((value) => parseInt(String(value * (1 - percentFrom1To100 / 100))))\n return '#' + darkRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction updateThemeColor(colorWithHash: string = '#409eff') {\n const colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/\n if (!colorRegex.test(colorWithHash)) {\n console.error('color must be a hex string')\n return\n }\n if (colorWithHash.length === 4) {\n colorWithHash = ['#']\n .concat(\n colorWithHash\n .slice(1)\n .split('')\n .map((item) => item + item),\n )\n .join('')\n }\n const el = document.documentElement\n const colorNames = [\n '--el-color-primary',\n '--el-color-primary-light-3',\n '--el-color-primary-light-5',\n '--el-color-primary-light-7',\n '--el-color-primary-light-8',\n '--el-color-primary-light-9',\n '--el-color-primary-dark-2',\n ]\n for (const item of colorNames) {\n const tail = item.slice(-1)\n if (tail === 'y') {\n el.style.setProperty(item, colorWithHash)\n } else if (tail === '2') {\n el.style.setProperty(item, darkColor(colorWithHash, Number(tail + '0')))\n } else {\n el.style.setProperty(item, lightColor(colorWithHash, Number(tail + '0')))\n }\n }\n}\n\nexport function useElementPlusTheme(colorWithHash?: string) {\n onBeforeMount(() => {\n updateThemeColor(colorWithHash)\n })\n return { updateThemeColor }\n}\n";await i(o.resolve(process.cwd(),"./src/hooks/color.ts"),e)}if(!await t(o.resolve(process.cwd(),"./build/config/index.ts"))){const e="import {"+r.EOL+" defineConfig as defineAppConfig,"+r.EOL+" mergeConfig,"+r.EOL+" loadEnv,"+r.EOL+" type UserConfig,"+r.EOL+" type ConfigEnv,"+r.EOL+" type PluginOption"+r.EOL+"} from 'vite'"+r.EOL+"import { createPlugins } from './plugins'"+(n.pluginElementPlus?r.EOL+"import { createElementPlusPlugins } from './ep'"+r.EOL:r.EOL)+"import { fileURLToPath, URL } from 'node:url'"+r.EOL+r.EOL+"interface ConfigOptions {"+r.EOL+" overrides?: UserConfig"+r.EOL+"}"+r.EOL+r.EOL+"export function defineConfig<T extends ConfigOptions>(options: T) {"+r.EOL+" const { overrides } = options"+r.EOL+" return defineAppConfig("+r.EOL+" (config: ConfigEnv): UserConfig => {"+r.EOL+" const prefixes = ['VITE_']"+r.EOL+" const env = loadEnv(config.mode, process.cwd(), prefixes)"+r.EOL+" const commonConfig: UserConfig = {"+r.EOL+" envPrefix: prefixes,"+r.EOL+" root: process.cwd(),"+r.EOL+" base: '/',"+r.EOL+" publicDir: 'public',"+r.EOL+" server: {"+r.EOL+" host: '0.0.0.0',"+r.EOL+" port: Number(env.VITE_APP_PORT),"+r.EOL+" proxy: {"+r.EOL+" [env.VITE_APP_BASE_URL]: {"+r.EOL+" target: env.VITE_APP_PROXY_URL,"+r.EOL+" changeOrigin: true,"+r.EOL+" rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_URL}`), '')"+r.EOL+" }"+r.EOL+" }"+r.EOL+" },"+r.EOL+" resolve: {"+r.EOL+" alias: {"+r.EOL+" '@': fileURLToPath(new URL('../../src', import.meta.url))"+r.EOL+" }"+r.EOL+" },"+r.EOL+" plugins: ["+r.EOL+" ...createPlugins()"+(n.pluginElementPlus?","+r.EOL+" ...createElementPlusPlugins()"+r.EOL:r.EOL)+" ]"+r.EOL+" }"+r.EOL+" return overrides ? mergeConfig(commonConfig, overrides) : commonConfig"+r.EOL+" }"+r.EOL+" )"+r.EOL+"}"+r.EOL;await i(o.resolve(process.cwd(),"./build/config/index.ts"),e)}const a="import { defineConfig } from './build/config'"+r.EOL+r.EOL+"export default defineConfig({"+r.EOL+" overrides: {"+r.EOL+r.EOL+" }"+r.EOL+"})"+r.EOL;await i(o.resolve(process.cwd(),"./vite.config.ts"),a);const u=await l(o.resolve(process.cwd(),"./package.json"));let m="";n.pluginEnvHelper&&n.pluginScanRoutes?m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL} "vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginScanRoutes?m=`"vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginEnvHelper&&(m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL}`),n.pluginElementPlus&&(m+=` "unplugin-auto-import": "^20.2.0",${r.EOL} "unplugin-vue-components": "^29.1.0",${r.EOL} "unplugin-element-plus": "^0.10.0",${r.EOL}`);const E=u.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,m),d=n.pluginElementPlus?E.replace(/"dependencies": \s*\{/g,'"dependencies": {'+r.EOL+' "element-plus": "^2.11.4",'):E;await i(o.resolve(process.cwd(),"./package.json"),d)}}}export{s as configHelper};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-config-helper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "把 vite.config.ts 配置进行逻辑拆分,并整合一些常用插件或代码,如 element-plus 自动导入组件样式配置的相关插件",
|
|
6
6
|
"keywords": [
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@rollup/plugin-terser": "^0.4.4",
|
|
39
|
-
"@rollup/plugin-typescript": "12.1.
|
|
40
|
-
"@types/node": "
|
|
41
|
-
"rollup": "^4.
|
|
39
|
+
"@rollup/plugin-typescript": "12.1.4",
|
|
40
|
+
"@types/node": "24.6.2",
|
|
41
|
+
"rollup": "^4.52.4",
|
|
42
42
|
"tslib": "^2.8.1",
|
|
43
|
-
"typescript": "^5.
|
|
43
|
+
"typescript": "^5.9.3"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"vite": "
|
|
46
|
+
"vite": "*"
|
|
47
47
|
}
|
|
48
48
|
}
|