@vnxjs/service
Version:
Vnmf Service
97 lines (89 loc) • 2.84 kB
text/typescript
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]
}
}
}