code: function getFrameworkPath({ framework, baseDir }) {
    const pkgPath = path.join(baseDir, 'package.json');
    assert(fs.existsSync(pkgPath), `${pkgPath} should exist`);
  
    const moduleDir = path.join(baseDir, 'node_modules');
    const pkg = utility.readJSONSync(pkgPath);
  
    // 1. pass framework or customEgg
    if (framework) {
      // 1.1 framework is an absolute path
      // framework: path.join(baseDir, 'node_modules/${frameworkName}')
      if (path.isAbsolute(framework)) {
        assert(fs.existsSync(framework), `${framework} should exist`);
        return framework;
      }
      // 1.2 framework is a npm package that required by application
      // framework: 'frameworkName'
      return assertAndReturn(framework, moduleDir);
    }
  
    // 2. framework is not specified
    // 2.1 use framework name from pkg.egg.framework
    if (pkg.egg && pkg.egg.framework) {
      return assertAndReturn(pkg.egg.framework, moduleDir);
    }
  
    // 2.2 use egg by default
    return assertAndReturn('egg', moduleDir);
  }
docs: Find the framework directory, lookup order
  - specify framework path
  - get framework name from
  - use egg by default
  @param {Object} options - options
  @param  {String} options.baseDir - the current directory of application
  @param  {String} [options.framework] - the directory of framework
  @return {String} frameworkPath