static closestSync(pathName, _ui, _cli) {
    logger.info('looking for package.json starting at %s', pathName);

    let ui = ensureUI(_ui);

    let directory = findupPath(pathName);
    let pkg = fs.readJsonSync(path.join(directory, 'package.json'));
    logger.info('found package.json at %s', directory);

    // allow `package.json` files to specify where the actual project lives
    if (pkg && pkg['ember-addon'] && typeof pkg['ember-addon'].projectRoot === 'string') {
      if (fs.existsSync(path.join(directory, 'ember-cli-build.js'))) {
        throw new Error(
          `Both \`ember-addon.projectRoot\` and \`ember-cli-build.js\` exist as part of \`${directory}\``
        );
      }

      return Project.closestSync(path.join(directory, pkg['ember-addon'].projectRoot), _ui, _cli);
    }

    let relative = path.relative(directory, pathName);
    if (relative.indexOf('tmp') === 0) {
      logger.info('ignoring parent project since we are in the tmp folder of the project');
      return Project.nullProject(_ui, _cli);
    }

    logger.info('project name: %s', pkg && pkg.name);

    if (!isEmberCliProject(pkg)) {
      logger.info('ignoring parent project since it is not an ember-cli project');
      return Project.nullProject(_ui, _cli);
    }

    return new Project(directory, pkg, ui, _cli);
  }
Returns a new project based on the first `package.json` that is found
    in `pathName`.

    If the above `package.json` specifies `ember-addon.projectRoot`, we load
    the project based on the relative path between this directory and the
    specified `projectRoot`.

    @private
    @static
    @method closestSync
    @param  {String} pathName Path to your project
    @param  {UI} _ui The UI instance to provide to the created Project.
    @return {Project}         Project instance