Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including egg-core with all npm packages installed. Try it out:

var eggCore = require("egg-core")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

egg-core v4.17.4

A core Pluggable framework based on koa


NPM version build status Test coverage David deps Known Vulnerabilities npm download

A core Pluggable framework based on koa.

Don't use it directly, see egg.


Directory structure

├── package.json
├── app.js (optional)
├── agent.js (optional)
├── app
|   ├── router.js
│   ├── controller
│   │   └── home.js
|   ├── extend (optional)
│   |   ├── helper.js (optional)
│   |   ├── filter.js (optional)
│   |   ├── request.js (optional)
│   |   ├── response.js (optional)
│   |   ├── context.js (optional)
│   |   ├── application.js (optional)
│   |   └── agent.js (optional)
│   ├── service (optional)
│   ├── middleware (optional)
│   │   └── response_time.js
│   └── view (optional)
|       ├── layout.html
│       └── home.html
├── config
|   ├── config.default.js
│   ├──
|   ├── config.test.js (optional)
|   ├── config.local.js (optional)
|   ├── config.unittest.js (optional)
│   └── plugin.js

Then you can start with code below

const Application = require('egg-core').EggCore;
const app = new Application({
  baseDir: '/path/to/app'
app.ready(() => app.listen(3000));


EggLoader can easily load files or directories in your egg project. In addition, you can customize the loader with low level APIs.


  • {String} baseDir - current directory of application
  • {Object} app - instance of egg application
  • {Object} plugins - merge plugins for test
  • {Logger} logger - logger instance,default is console

High Level APIs


Load config/plugin.js


Load config/config.js and config/{serverEnv}.js


Load app/controller


Load app/middleware


Load app/extend/application.js


Load app/extend/context.js


Load app/extend/request.js


Load app/extend/response.js


Load app/extend/helper.js


Load app.js, if app.js export boot class, then trigger configDidLoad


Load agent.js, if agent.js export boot class, then trigger configDidLoad


Load app/service

Low Level APIs


Retrieve application environment variable values via serverEnv. You can access directly by calling this.serverEnv after instantiation.

defaultdefault environment
testsystem integration testing environment
prodproduction environment
locallocal environment on your own computer
unittestunit test environment


To get directories of the frameworks. A new framework is created by extending egg, then you can use this function to get all frameworks.


A loadUnit is a directory that can be loaded by EggLoader, cause it has the same structure.

This function will get add loadUnits follow the order:

  1. plugin
  2. framework
  3. app

loadUnit has a path and a type. Type must be one of those values: app, framework, plugin.

  path: 'path/to/application',
  type: 'app'


To get application name from package.json


Get the infomation of the application

  • pkg: package.json
  • name: the application name from package.json
  • baseDir: current directory of application
  • env: equals to serverEnv
  • HOME: home directory of the OS
  • root: baseDir when local and unittest, HOME when other environment


To load a single file. Note: The file must export as a function.

loadToApp(directory, property, LoaderOptions)

To load files from directory in the application.

Invoke this.loadToApp('$baseDir/app/controller', 'controller'), then you can use it by app.controller.

loadToContext(directory, property, LoaderOptions)

To load files from directory, and it will be bound the context.

// define service in app/service/query.js
module.exports = class Query {
  constructor(ctx) {
    // get the ctx

  get() {}

// use the service in app/controller/home.js
module.exports = function*() {
  this.body = this.service.query.get();

loadExtend(name, target)

Loader app/extend/xx.js to target, For example,

this.loadExtend('application', app);


directoryString/Arraydirectories to be loaded
targetObjectattach the target object from loaded files
matchString/Arraymatch the files when load, default to **/*.js(if process.env.EGG_TYPESCRIPT was true, default to `[ '*/.(js
ignoreString/Arrayignore the files when load
initializerFunctioncustom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an options object that contain path
caseStyleString/Functionset property's case when converting a filepath to property list.
overrideBooleandetermine whether override the property when get the same name
callBooleandetermine whether invoke when exports is function
injectObjectan object that be the argument when invoke the function
filterFunctiona function that filter the exports which can be loaded

Questions & Suggestions

Please open an issue here.



RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free