async findPackageManager(packageManager = null) {
    if (packageManager === 'yarn') {
      logger.info('yarn requested -> trying yarn');
      return this.checkYarn();
    }

    if (packageManager === 'npm') {
      logger.info('npm requested -> using npm');
      return this.checkNpmVersion();
    }

    if (packageManager === 'pnpm') {
      logger.info('pnpm requested -> using pnpm');
      return this.checkPNPM();
    }

    if (this.hasYarnLock()) {
      logger.info('yarn.lock found -> trying yarn');
      try {
        const yarnResult = await this.checkYarn();
        logger.info('yarn found -> using yarn');
        return yarnResult;
      } catch (_err) {
        logger.info('yarn not found');
      }
    } else {
      logger.info('yarn.lock not found');
    }

    if (await this.hasPNPMLock()) {
      logger.info('pnpm-lock.yaml found -> trying pnpm');
      try {
        let result = await this.checkPNPM();
        logger.info('pnpm found -> using pnpm');
        return result;
      } catch (_err) {
        logger.info('pnpm not found');
      }
    } else {
      logger.info('pnpm-lock.yaml not found');
    }

    logger.info('using npm');
    return this.checkNpmVersion();
  }
This method will determine what package manager (npm or yarn) should be
used to install the npm dependencies.

Setting `this.useYarn` to `true` or `false` will force the use of yarn
or npm respectively.

If `this.useYarn` is not set we check if `yarn.lock` exists and if
`yarn` is available and in that case set `useYarn` to `true`.

@private
@method findPackageManager
@return {Promise}