async downloadBoilerplate(pkgName, tag = 'latest') {
    const result = await this.getPackageInfo(pkgName, tag, false);
    if (!result.dist) {
      throw new Error(`boilerplate: ${pkgName}@${tag} not found`);
    }
    const tgzUrl = result.dist.tarball;
    const saveDir = path.join(os.tmpdir(), 'beidou-init-boilerplate');
    log.info(`downloading: ${tgzUrl}`);
    await this.downloadAndUnzip(tgzUrl, saveDir);
    log.info(`extract to: ${saveDir}`);
    return saveDir;
  }
ownload boilerplate by pkgName then extract it
@param {String} pkgName - boilerplate package name
@param {String} tag - boilerplate package tag
@return {String} extract directory