code: def build(package, path=None, dry_run=False, env='default', force=False, build_file=False):
      
      # TODO: rename 'path' param to 'target'?
      team, _, _, subpath = parse_package(package, allow_subpath=True)
      _check_team_id(team)
      logged_in_team = _find_logged_in_team()
      if logged_in_team is not None and team is None and force is False:
          answer = input("You're logged in as a team member, but you aren't specifying "
                         "a team for the package you're currently building. Maybe you meant:\n"
                         "quilt build {team}:{package}\n"
                         "Are you sure you want to continue? (y/N) ".format(
                                  team=logged_in_team, package=package))
          if answer.lower() != 'y':
              return
  
      # Backward compatibility: if there's no subpath, we're building a top-level package,
      # so treat `path` as a build file, not as a data node.
      if not subpath:
          build_file = True
  
      package_hash = hashlib.md5(package.encode('utf-8')).hexdigest()
      try:
          _build_internal(package, path, dry_run, env, build_file)
      except Exception as ex:
          _log(team, type='build', package=package_hash, dry_run=dry_run, env=env, error=str(ex))
          raise
      _log(team, type='build', package=package_hash, dry_run=dry_run, env=env)
docs: Compile a Quilt data package, either from a build file or an existing package node.
  
      :param package: short package specifier, i.e. 'team:user/pkg'
      :param path: file path, git url, or existing package node