Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Set of scripts that make PhantomJS's environment more similar to Node.js.
JavaScript
Branch: master

Remove require()

CommonJS require() from this project has been merged into PhantomJS 1.7.
There is no need to keep it here (CoffeeScript is also no longer
needed).

Also removes dummy stack traces (PhantomJS now has stack traces) and
reorganizes directory structure.

This commit changes the way phantomjs-nodify is used in your scripts,
please read README.
latest commit b812c24869
@jgonera authored

README.md

phantomjs-nodify

Set of scripts that make PhantomJS environment more similar to Node.js. I implemented what I needed for my scripts. Feel free to fork and add more.

Implemented features:

  • Module support mostly compatible with CommonJS and Node.js, i.e. require() works not only for PhantomJS built-in modules. Most of the functionality from Node.js Modules (up to The module Object) should work. Merged into PhantomJS since PhantomJS 1.7.
  • Exceptions thrown from required files are properly reported (with file name and line number). Line number for .coffee files may not be accurate. Merged into PhantomJS since PhantomJS 1.7.
  • Global process object (some basic functionality + emits uncaughtException on exceptions that occur inside setTimeout blocks).
  • console with string formatting (e.g. console.log('hello %s', 'world')).
  • Some Node.js modules (see lib/modules dir).
  • Other minor tweaks.

Some code taken from Node.js. Uses Mocha + Chai for testing.

How to use

Clone:

git clone git://github.com/jgonera/phantomjs-nodify.git

Require in your PhantomJS script at the very first line:

require('phantomjs-nodify');

Stubbing require()

This feature no longer depends on phantomjs-nodify. Since PhantomJS 1.7 it is available in PhantomJS itself, but remains an undocumented secret ;)

Since commit PhantomJS 1.7 you can stub required modules in the given module context which helps porting Node.js libraries. For example, let's say you have a module file a.js in the same directory as your main script. You require this module in the main script (require('./a')). Then, a.js contains:

require.stub('zlib', {
  createGzip: function() { ... }
});

var something = require('some_node.js_module_that_requires_zlib');

Now require('zlib') will return the object with the createGzip function in a.js and in every module required by it, but not in parent modules (in this case require('zlib') will throw a "Cannot find module" exception in the main script).

This is especially useful when trying to require libraries written for Node.js which require modules not included in phantomjs-nodify.

Running tests

If you fork and add something, please write tests for it. You can run the tests after fetching the necessary submodules:

git submodule init
git submodule update
make test
Something went wrong with that request. Please try again.