/** * 侦察模块 * @description 自动检测环境并智能生成 */ import { r } from './path' import { loadEnv } from 'vite' import browserslist from 'browserslist' import { detectMode } from 'vite-layers' import { isPackageExists } from 'local-pkg' import type { ComponentResolver } from 'unplugin-vue-components' const { loadConfig: browserslistLoadConfig } = browserslist /** * 默认打包目标 (浏览器兼容程度) */ export const defaultBuildTargets = browserslistLoadConfig({ path: r('./'), }) || ['last 2 versions and not dead, > 0.3%, Firefox ESR'] type Arrayable = T | Array interface Options { onlyExist?: [Arrayable, string][] include?: ComponentResolver[] } /** * 发现 resolvers */ export function detectResolvers(options: Options = {}) { const { onlyExist = [], include = [] } = options const existedResolvers = [] for (let i = 0; i < onlyExist.length; i++) { const [resolver, packageName] = onlyExist[i] if ( isPackageExists(packageName, { paths: [r('./')], }) ) { existedResolvers.push(resolver) } } existedResolvers.push(...include) return existedResolvers } // 获取环境变量 export function useEnv() { function stringToBoolean(v: string) { return Boolean(v === 'true' || false) } const { VITE_APP_TITLE, VITE_APP_DEV_TOOLS, VITE_APP_MARKDOWN, VITE_APP_API_AUTO_IMPORT, VITE_APP_MOCK_IN_PRODUCTION, VITE_APP_DIR_API_AUTO_IMPORT, VITE_APP_COMPRESSINON_ALGORITHM, } = loadEnv(detectMode(), '.') return { VITE_APP_TITLE, VITE_APP_COMPRESSINON_ALGORITHM, VITE_APP_DEV_TOOLS: stringToBoolean(VITE_APP_DEV_TOOLS), VITE_APP_MARKDOWN: stringToBoolean(VITE_APP_MARKDOWN), VITE_APP_API_AUTO_IMPORT: stringToBoolean(VITE_APP_API_AUTO_IMPORT), VITE_APP_MOCK_IN_PRODUCTION: stringToBoolean(VITE_APP_MOCK_IN_PRODUCTION), VITE_APP_DIR_API_AUTO_IMPORT: stringToBoolean(VITE_APP_DIR_API_AUTO_IMPORT), } }