docs: function genUrl(ids) {
      var url = settings.compDomain + '/components/??';
      var comboIds = [];
      var replaceContext = '';
      var file = fis.project.lookup(ids[0]).file;
      if(!file){
          log.error('can not find file named '+ids[0])
      }
  
      if (type(ids) === 'string') ids = ids.split(' ');
  
      if (settings.compDomain === void 0 && file.release) {
          var topName = file.release.split(file.id)[0];
          each(ids, function(id, i) {
              var url = topName + id;
              var hash = ycombo.getHash(id);
              var t = fileType(url),
                  isScript = t === 'js',
                  isCss = t === 'css';
              if (isScript) {
                  replaceContext += ycombo.getScript(url, hash) + '\n\t';
              } else if (isCss) {
                  replaceContext += ycombo.getLink(url, hash) + '\n\t';
              }
          })
      } else if(settings.compDomain === void 0 && !file.release){
          log.error('缺少合并组件CDN 或 组件输出路径');
      } else{
          each(ids, function(value, key) {
              var compName = value.split(path.sep)[1];
              if (compConfJson[compName] != undefined) {
                  ids[key] = value.replace(/components\/(\S+)\/(.+)/, '$1/' + compConfJson[compName] + '/$2');
              } else {
                  ids[key] = value.replace(/components\/(\S+)\/(.+)/, '$1/$2');
              }
  
          })
  
          switch (type(url)) {
              case 'string':
                  url = url + ids.join(',');
                  break;
              case 'function':
                  url = url(ids);
                  break;
              default:
                  url = ids.join(',');
          }
  
          var t = fileType(url),
              isScript = t === 'js',
              isCss = t === 'css';
          if (isScript) {
              replaceContext = ycombo.getScript(url);
          } else if (isCss) {
              replaceContext = ycombo.getLink(url);
          }
  
      }
  
      return replaceContext;
  }