42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { existsSync } from 'fs'
|
|
import { gray } from 'kolorist'
|
|
import { basename } from 'path'
|
|
import { r } from '../shared/path'
|
|
import { Restart } from './restart'
|
|
import { createConsola } from 'consola'
|
|
import type { Plugin, UserConfig } from 'vite'
|
|
import { Layers as loadLayer, detectMode } from 'vite-layers'
|
|
|
|
const logger = createConsola().withTag('layers')
|
|
|
|
/**
|
|
* vite 配置层
|
|
* @description 通过 mode 区分 vite 配置文件 (experimental)
|
|
*/
|
|
export function Layers(): Plugin {
|
|
const mode = detectMode()
|
|
const modeFiles = [mode.slice(0, 3), mode].map((mode) =>
|
|
r(`vite.config.${mode}.ts`),
|
|
)
|
|
return {
|
|
...Restart(modeFiles.map((modeFile) => basename(modeFile))),
|
|
name: 'vite-plugin-layers',
|
|
enforce: 'post',
|
|
async config(config) {
|
|
const modeFile = modeFiles.find((modeFile) => existsSync(modeFile))
|
|
if (modeFile) {
|
|
logger
|
|
.withTag(mode)
|
|
.success(
|
|
`vite.config.ts → ${basename(modeFile)} ${gray(`(experimental)`)}`,
|
|
)
|
|
return loadLayer({
|
|
logger: false,
|
|
extends: [config, modeFile],
|
|
}) as UserConfig
|
|
}
|
|
return config
|
|
},
|
|
}
|
|
}
|