아도니스 제이에스 / js
Adonisjs at startup
app.js
_loadPreLoadFiles
이전에
this._registerProviders()와
await this._bootProviders()를 호출한다. 이 때 app.js 에 접근해서 Providers 를 가져오고, 이 Provider 의 register() 와 boot() 을 호출한다.
preloaded files
아도니스js 에서 처음에 load 하는 file 들은 다음과 같다.(_loadPreLoadFiles)
- 'start/routes',
- 'start/events',
- 'start/socket',
- 'start/kernel',
- 'start/wsKernel'
이 부분은 Ignitor source 에서 확인할 수 있다.
new Ignitor(require('@adonisjs/fold'))
.appRoot(__dirname)
.fireHttpServer()
.catch(console.error)
class Ignitor {
constructor (fold) {
this._fold = fold
this._appRoot = null
this._modulesRoot = null
this._loadCommands = false
/**
* Files to be preloaded
*
* @type {Array}
*/
this._preLoadFiles = [
'start/routes',
'start/events',
'start/socket',
'start/kernel',
'start/wsKernel'
]
/**
* Default app file
*
* @type {String}
*/
this._appFile = 'start/app.js'
...
}
...
async fire () {
...
this._registerProviders()
await this._bootProviders()
...
this._loadPreLoadFiles()
}
async fireHttpServer (httpServerCallback) {
try {
await this.fire()
await this._startHttpServer(httpServerCallback)
} catch (error) {
this._printError(error)
}
}
/**
* Return the exported values from the appFile. Also
* it will validate the exports object to have all
* required keys.
*
* @method _getAppAttributes
*
* @return {Object}
*
* @private
*/
_getAppAttributes () {
return require(path.join(this._appRoot, this._appFile))
}
/**
* Registers an array of providers to the Ioc container. This
* method will make use of the `appFile` to get the providers
* list.
*
* @method _registerProviders
*
* @return {void}
*
* @private
*/
_registerProviders () {
this._callHooks('before', 'providersRegistered')
/**
* Getting list of providers and registering them.
*/
const { providers, aceProviders } = this._getAppAttributes()
const providersToRegister = this._loadCommands ? providers.concat(aceProviders) : providers
this._fold.registrar.providers(providersToRegister).register()
debug('registered providers')
this._callHooks('after', 'providersRegistered')
}
/**
* Boot providers
*
* @method _bootProviders
*
* @return {void}
*
* @async
*
* @private
*/
async _bootProviders () {
this._callHooks('before', 'providersBooted')
/**
* The providers set set on `registrar` when they were registered. We
* use the same set to boot the previously registered providers.
*/
await this._fold.registrar.boot()
debug('booted providers')
this._callHooks('after', 'providersBooted')
}
...
_loadPreLoadFiles () {
this._callHooks('before', 'preloading')
...
this._preLoadFiles.forEach((file) => {
const filePath = path.isAbsolute(file) ? file : path.join(this._appRoot, file)
/**
* Require file when it's not optional or when optional
* file exists
*/
if (!this._isOptional(file) || this._fileExists(filePath)) {
require(filePath)
}
})
this._callHooks('after', 'preloading')
}
}
댓글 없음:
댓글 쓰기