import fs from 'fs' import path from 'path' import { BuildOptions, InlineConfig } from 'vite' import { isInHBuilderX } from '@dcloudio/uni-cli-shared' import { CliOptions } from '.' export const PLATFORMS = [ 'app', 'h5', 'mp-alipay', 'mp-baidu', 'mp-qq', 'mp-toutiao', 'mp-weixin', 'quickapp-webview-huawei', 'quickapp-webview-union', ] function resolveConfigFile() { const viteConfigJs = path.resolve(process.env.UNI_INPUT_DIR, 'vite.config.js') const viteConfigTs = path.resolve(process.env.UNI_INPUT_DIR, 'vite.config.ts') if (fs.existsSync(viteConfigTs)) { return viteConfigTs } if (fs.existsSync(viteConfigJs)) { return viteConfigJs } return path.resolve(process.env.UNI_CLI_CONTEXT, 'vite.config.js') } export function addConfigFile(inlineConfig: InlineConfig) { if (isInHBuilderX()) { inlineConfig.configFile = resolveConfigFile() } return inlineConfig } export function initEnv(type: 'dev' | 'build', options: CliOptions) { if (type === 'dev') { process.env.NODE_ENV = 'development' } else if (type === 'build') { if ((options as BuildOptions).watch) { process.env.NODE_ENV = 'development' } else { process.env.NODE_ENV = 'production' } } process.env.UNI_CLI_CONTEXT = isInHBuilderX() ? path.resolve(process.env.UNI_HBUILDERX_PLUGINS!, 'uniapp-cli-vite') : process.cwd() process.env.UNI_PLATFORM = options.platform as UniApp.PLATFORM process.env.VITE_ROOT_DIR = process.env.UNI_INPUT_DIR || process.cwd() process.env.UNI_INPUT_DIR = process.env.UNI_INPUT_DIR || path.resolve(process.cwd(), 'src') if (process.env.UNI_OUTPUT_DIR) { ;(options as BuildOptions).outDir = process.env.UNI_OUTPUT_DIR } else { if (!(options as BuildOptions).outDir) { ;(options as BuildOptions).outDir = path.join( 'dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM ) } process.env.UNI_OUTPUT_DIR = (options as BuildOptions).outDir! } // tips if (isInHBuilderX() && options.platform === 'app') { return ( console.error(`Vue3 目前暂不支持编译至 App 端,近期将升级支持。`), process.exit(1) ) } } export function cleanOptions(options: CliOptions) { const ret = { ...options } delete ret['--'] delete ret.platform delete ret.p delete ret.ssr delete ret.debug delete ret.d delete ret.filter delete ret.f delete ret.logLevel delete ret.l delete ret.clearScreen return ret }