Package Exports
- egg-core
- egg-core/lib/loader/file_loader
- egg-core/lib/utils
- egg-core/lib/utils/router
- egg-core/package
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (egg-core) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
egg-core
A core Pluggable framework based on koa
Don't use it directly, see egg
Usage
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.prod.js
| ├── config.test.js (optional)
| ├── config.local.js (optional)
| ├── config.unittest.js (optional)
│ └── plugin.jsThen 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
EggLoader can easily load files or directories in your egg** project. In addition, you can customize the loader with low level APIs.
constructor
- {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
loadPlugin
Load config/plugin.js
loadConfig
Load config/config.js and config/{serverEnv}.js
loadController
Load app/controller
loadMiddleware
Load app/middleware
loadApplicationExtend
Load app/extend/application.js
loadContextExtend
Load app/extend/context.js
loadRequestExtend
Load app/extend/request.js
loadResponseExtend
Load app/extend/response.js
loadHelperExtend
Load app/extend/helper.js
loadCustomApp
Load app.js
loadCustomAgent
Load agent.js
loadService
Load app/service
Low Level APIs
getServerEnv()
Retrieve application environment variable values via serverEnv. You can access directly by calling this.serverEnv after instantiation.
| serverEnv | description |
|---|---|
| default | default environment |
| test | system integration testing environment |
| prod | production environment |
| local | local environment on your own computer |
| unittest | unit test environment |
getEggPaths()
To get directories of the frameworks. A new framework is created by extending egg, then you can use this function to get all frameworks.
getLoadUnits()
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:
- plugin
- framework
- app
loadUnit has a path and a type. Type must be one of those values: app, framework, plugin.
{
path: 'path/to/application',
type: 'app'
}getAppname()
To get application name from package.json
appInfo
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
loadFile(filepath)
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);LoaderOptions
| Param | Type | Description |
|---|---|---|
| directory | String/Array |
directories to be loaded |
| target | Object |
attach the target object from loaded files |
| match | String/Array |
match the files when load, default to **/*.js |
| ignore | String/Array |
ignore the files when load |
| initializer | Function |
custom 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 |
| caseStyle | String/Function |
set property's case when converting a filepath to property list. |
| override | Boolean |
determine whether override the property when get the same name |
| call | Boolean |
determine whether invoke when exports is function |
| inject | Object |
an object that be the argument when invoke the function |
| filter | Function |
a function that filter the exports which can be loaded |
Questions & Suggestions
Please open an issue here.