1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 'use strict';
- const is = require('is-type-of');
- const path = require('path');
- const LOAD_BOOT_HOOK = Symbol('Loader#loadBootHook');
- module.exports = {
- /**
- * load app.js
- *
- * @example
- * - old:
- *
- * ```js
- * module.exports = function(app) {
- * doSomething();
- * }
- * ```
- *
- * - new:
- *
- * ```js
- * module.exports = class Boot {
- * constructor(app) {
- * this.app = app;
- * }
- * configDidLoad() {
- * doSomething();
- * }
- * }
- * @since 1.0.0
- */
- loadCustomApp() {
- this[LOAD_BOOT_HOOK]('app');
- this.lifecycle.triggerConfigWillLoad();
- },
- /**
- * Load agent.js, same as {@link EggLoader#loadCustomApp}
- */
- loadCustomAgent() {
- this[LOAD_BOOT_HOOK]('agent');
- this.lifecycle.triggerConfigWillLoad();
- },
- // FIXME: no logger used after egg removed
- loadBootHook() {
- // do nothing
- },
- [LOAD_BOOT_HOOK](fileName) {
- this.timing.start(`Load ${fileName}.js`);
- for (const unit of this.getLoadUnits()) {
- const bootFilePath = this.resolveModule(path.join(unit.path, fileName));
- if (!bootFilePath) {
- continue;
- }
- const bootHook = this.requireFile(bootFilePath);
- if (is.class(bootHook)) {
- bootHook.prototype.fullPath = bootFilePath;
- // if is boot class, add to lifecycle
- this.lifecycle.addBootHook(bootHook);
- } else if (is.function(bootHook)) {
- // if is boot function, wrap to class
- // for compatibility
- this.lifecycle.addFunctionAsBootHook(bootHook);
- } else {
- this.options.logger.warn('[egg-loader] %s must exports a boot class', bootFilePath);
- }
- }
- // init boots
- this.lifecycle.init();
- this.timing.end(`Load ${fileName}.js`);
- },
- };
|