UNPKG

brain-cli

Version:

A command line tool used to run projects

96 lines (95 loc) 3.79 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "path", "../constants/constants", "invariant", "../utils/requireBabelify"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.configFileList = void 0; const path = require("path"); const constants_1 = require("../constants/constants"); const invariant = require("invariant"); const requireBabelify_1 = require("../utils/requireBabelify"); const deepAssign = require('deep-assign'); 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]; const nodeModulesPath = path.resolve(process.cwd(), 'node_modules'); class EConfig { constructor() { this.isTslint = true; this.webpack = { dllConfig: { vendors: ['react', 'react-dom', 'invariant'], customDll: [], compileOptions: {}, }, disableReactHotLoader: false, commonsChunkPlugin: ['common'], happyPack: { open: false, }, /** * ts 处理插件 主要有'ts-loader'|'awesome-typescript-loader' * 默认 'ts-loader' */ tsCompilePlugin: { loader: 'ts-loader' }, plugins: [], resolve: {}, }; this.init(); } static getInstance() { if (!EConfig.instance) { EConfig.instance = new EConfig(); } return EConfig.instance; } init() { let finalConfig = this.getFinalConfig(); EConfig.validateConfig(finalConfig); if (finalConfig.webpack.dllConfig && finalConfig.webpack.dllConfig.vendors && !Array.isArray(finalConfig.webpack.dllConfig.vendors)) { delete this.webpack.dllConfig.vendors; } 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; });