UNPKG

@vnxjs/service

Version:
97 lines (89 loc) 2.84 kB
import { createSwcRegister, ENTRY, getModuleDefaultExport, OUTPUT_DIR, resolveScriptPath, SOURCE_DIR } from '@vnxjs/helper' import { IProjectConfig } from '@vnxjs/vnmf/types/compile' import * as fs from 'fs-extra' import * as path from 'path' import * as merge from 'webpack-merge' import { CONFIG_DIR_NAME, DEFAULT_CONFIG_FILE } from './utils/constants' interface IConfigOptions { appPath: string } export default class Config { appPath: string configPath: string initialConfig: IProjectConfig isInitSuccess: boolean constructor (opts: IConfigOptions) { this.appPath = opts.appPath this.init() } init () { this.configPath = resolveScriptPath(path.join(this.appPath, CONFIG_DIR_NAME, DEFAULT_CONFIG_FILE)) if (!fs.existsSync(this.configPath)) { this.initialConfig = {} this.isInitSuccess = false } else { createSwcRegister({ only: [ filePath => filePath.indexOf(path.join(this.appPath, CONFIG_DIR_NAME)) >= 0 ] }) try { this.initialConfig = getModuleDefaultExport(require(this.configPath))(merge) this.isInitSuccess = true } catch (err) { this.initialConfig = {} this.isInitSuccess = false console.log(err) } } } getConfigWithNamed (platform, useConfigName) { const initialConfig = this.initialConfig const sourceDirName = initialConfig.sourceRoot || SOURCE_DIR const outputDirName = initialConfig.outputRoot || OUTPUT_DIR const sourceDir = path.join(this.appPath, sourceDirName) const entryName = ENTRY const entryFilePath = resolveScriptPath(path.join(sourceDir, entryName)) const entry = { [entryName]: [entryFilePath] } return { entry, alias: initialConfig.alias || {}, copy: initialConfig.copy, sourceRoot: sourceDirName, outputRoot: outputDirName, platform, framework: initialConfig.framework, compiler: initialConfig.compiler, cache: initialConfig.cache, logger: initialConfig.logger, baseLevel: initialConfig.baseLevel, csso: initialConfig.csso, sass: initialConfig.sass, uglify: initialConfig.uglify, plugins: initialConfig.plugins, projectName: initialConfig.projectName, env: initialConfig.env, defineConstants: initialConfig.defineConstants, designWidth: initialConfig.designWidth, deviceRatio: initialConfig.deviceRatio, projectConfigName: initialConfig.projectConfigName, jsMinimizer: initialConfig.jsMinimizer, cssMinimizer: initialConfig.cssMinimizer, terser: initialConfig.terser, esbuild: initialConfig.esbuild, ...initialConfig[useConfigName] } } }