123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 'use strict';
- const fs = require('fs');
- const path = require('path');
- const assert = require('assert');
- const os = require('os');
- const mkdirp = require('mkdirp');
- const tmpDir = os.tmpdir();
- const logger = {
- debug: noop,
- info: noop,
- warn: noop,
- error: noop,
- };
- exports.getPlugins = opt => {
- const loader = getLoader(opt);
- loader.loadPlugin();
- return loader.allPlugins;
- };
- exports.getLoadUnits = opt => {
- const loader = getLoader(opt);
- loader.loadPlugin();
- return loader.getLoadUnits();
- };
- exports.getConfig = opt => {
- const loader = getLoader(opt);
- loader.loadPlugin();
- loader.loadConfig();
- return loader.config;
- };
- function getLoader({ framework, baseDir, env }) {
- assert(framework, 'framework is required');
- assert(fs.existsSync(framework), `${framework} should exist`);
- if (!(baseDir && fs.existsSync(baseDir))) {
- baseDir = path.join(tmpDir, String(Date.now()), 'tmpapp');
- mkdirp.sync(baseDir);
- fs.writeFileSync(path.join(baseDir, 'package.json'), JSON.stringify({ name: 'tmpapp' }));
- }
- const EggLoader = findEggCore({ baseDir, framework }).EggLoader;
- const { Application } = require(framework);
- if (env) process.env.EGG_SERVER_ENV = env;
- return new EggLoader({
- baseDir,
- logger,
- app: Object.create(Application.prototype),
- });
- }
- function findEggCore({ baseDir, framework }) {
- try {
- const name = 'egg-core';
- return require(name);
- } catch (_) {
- let eggCorePath = path.join(baseDir, 'node_modules/egg-core');
- if (!fs.existsSync(eggCorePath)) {
- eggCorePath = path.join(framework, 'node_modules/egg-core');
- }
- assert(fs.existsSync(eggCorePath), `Can't find egg-core from ${baseDir} and ${framework}`);
- return require(eggCorePath);
- }
- }
- function noop() {}
|