   ###
 
   compile: ->
+    set_up_workers.call(@, @opts)
     Compile = require('./api/compile')
     (new Compile(@)).exec()
+      .then(disconnect_workers.bind(@))
 
   ###*
    * Watches a folder for changes and compiles whenever changes happen.

   * @return {Function} - instance of the Roots class
  ###

  constructor: (@root, opts={}) ->
    @root = path.resolve(@root)
    if not fs.existsSync(@root) then throw new Error("path does not exist")
    @extensions = new Extensions(@)
    @config = new Config(@, opts)
    set_up_workers.call(@, opts)

  ###*
   * Alternate constructor, creates a new roots project in a given folder and

  ###

  watch: ->
    set_up_workers.call(@, @opts)
    Watch = require('./api/watch')
    (new Watch(@)).exec()
    # when watch is cancelled take down the workers

  ###*
   * Removes a project's output folder.
