avoid depending on PhantomJS in runtime