UNPKG

brain-vue-cli

Version:

A command line tool used to run projects

61 lines (60 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const invariant = require("invariant"); const deepAssign = require('deep-assign'); const constants_1 = require("../constants/constants"); const requireBabelify_1 = require("../utils/requireBabelify"); const defaultEConfig = require(path.resolve(__dirname, `../../${constants_1.PROJECT_USER_CONFIG_FILE}`)); /** * 可选配置列表, 优先级从低到高由左到右 */ exports.configFileList = [constants_1.PROJECT_USER_CONFIG_FILE, constants_1.PROJECT_USER_CONFIG_IGNORE_FILE]; class EConfig { constructor() { this.projectType = 'js'; this.disableEslint = false; this.init(); } static getInstance() { if (!EConfig.instance) { EConfig.instance = new EConfig(); } return EConfig.instance; } init() { let finalConfig = this.getFinalConfig(); EConfig.validateConfig(finalConfig); deepAssign(this, finalConfig); } getFinalConfig() { const workingDir = process.cwd(); return exports.configFileList.reduce((config, current) => { const configPath = path.resolve(workingDir, current); return this.getConfig(configPath, config); }, defaultEConfig); } getConfig(filePath, eConfig) { let config = eConfig; try { const tempConfig = requireBabelify_1.requireBabelify(filePath); config = typeof tempConfig === `function` ? tempConfig(eConfig) : tempConfig; } catch (e) { if (e.code === `MODULE_NOT_FOUND`) { /** * nullable, skip error */ } else { throw e; } } return config; } static validateConfig(config) { invariant(config.name, `请在配置文件中输入项目名称, e.g. config.name = 'test'`); invariant(config.apps.length, `请在至少配置一个app name作为项目入口点, e.g. config.apps = ['user']`); } } exports.default = EConfig;