'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() {}
|