code: function getMergedDependency( projectData, abspath, options ) {
      var calc_deps = [];
      var fileDeps = projectData.dependency[abspath];
      if ( !fileDeps ) { return calc_deps; }
  
      fileDeps.forEach(function( a_dep_id ){
  
        // User specified a function to resolve the id to a file path
        if ( typeof options.resolveID == "function" ) {
          var newPath = options.resolveID( a_dep_id );
          if ( newPath ) {
            this.push( newPath );
            return;
          }
        }
  
        // Use default logic to resolve the id to a file,
        // When user does nothing for the id.
        var dep_abs_path   = projectData.id2File[ a_dep_id ];
        var dep_merge      = projectData.dep_merge;
        var dep_merge_path = dep_merge[ dep_abs_path ];
  
        if ( dep_merge_path ) {
          if ( dep_merge_path != dep_merge[ abspath ] ) {
            // Use the merged file path, if current file and dependency won't merge into the same file
            dep_abs_path = dep_merge_path;
          } else {
            // Dependency and current file will merge into one file.
            // Dependency will come first, so no need to specify dependency.
            return;
          }
        } 
  
        this.push( dep_abs_path ? resolveToBase( dep_abs_path, options.seajsBasePath ) : a_dep_id );
  
      }, calc_deps);
  
      return dereplicate( calc_deps );
    }
docs: The dependency array contains file path ( relative to seajs's base )