egg-utils
Version:
Utils for all egg projects
70 lines (60 loc) • 1.77 kB
JavaScript
;
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() {}