# File lib/nanoc3/base/compiler.rb, line 56
    def run(item=nil, params={})
      # Create output directory if necessary
      FileUtils.mkdir_p(@site.config[:output_dir])

      # Load dependencies
      dependency_tracker.load_graph

      # Get items and reps to compile
      if item
        items = [ item ] + dependency_tracker.successors_of(item)
        items.uniq!
      else
        items = @site.items
      end
      reps = items.map { |i| i.reps }.flatten

      # Prepare dependencies
      if params.has_key?(:force) && params[:force]
        reps.each { |r| r.force_outdated = true }
      else
        dependency_tracker.propagate_outdatedness
      end
      forget_dependencies_if_outdated(items)

      # Compile reps
      dependency_tracker.start
      compile_reps(reps)
      dependency_tracker.stop

      # Cleanup
      FileUtils.rm_rf(Nanoc3::Filter::TMP_BINARY_ITEMS_DIR)

      # Store dependencies
      dependency_tracker.store_graph
    end