84 lines
2.2 KiB
ReStructuredText
84 lines
2.2 KiB
ReStructuredText
|
.. _writing_modules:
|
|||
|
|
|||
|
.. index:: Modules, Modules, Custom module
|
|||
|
|
|||
|
Writing CasperJS modules
|
|||
|
========================
|
|||
|
|
|||
|
As of 1.1, CasperJS relies on PhantomJS' native ``require()`` function internally though it had to be patched in order to allow requiring casper modules using their full name, eg. ``require('casper')``.
|
|||
|
|
|||
|
So if you plan to write your own modules and use casperjs' ones from them, be sure to call the ``patchRequire()`` function::
|
|||
|
|
|||
|
// my module, stored in universe.js
|
|||
|
// patching phantomjs' require()
|
|||
|
var require = patchRequire(require);
|
|||
|
|
|||
|
// now you're ready to go
|
|||
|
var utils = require('utils');
|
|||
|
var magic = 42;
|
|||
|
exports.answer = function() {
|
|||
|
return utils.format("it's %d", magic);
|
|||
|
};
|
|||
|
|
|||
|
.. warning::
|
|||
|
|
|||
|
When using CoffeeScript ``global.require`` must be passed to ``patchRequire()`` instead of just ``require``::
|
|||
|
|
|||
|
require = patchRequire global.require
|
|||
|
|
|||
|
utils = require 'utils'
|
|||
|
magic = 42
|
|||
|
exports.answer = ->
|
|||
|
utils.format "it's ${magic}"
|
|||
|
|
|||
|
From your root casper script::
|
|||
|
|
|||
|
var universe = require('./universe');
|
|||
|
console.log(universe.answer()); // prints "It's 42"
|
|||
|
|
|||
|
.. versionadded:: 1.1.
|
|||
|
|
|||
|
.. hint::
|
|||
|
|
|||
|
CasperJS allows using nodejs modules installed through npm_. Note that since CasperJS uses it's own JavaScript environment, npm modules that use node-specific features will not work under CasperJS.
|
|||
|
|
|||
|
As an example, let's install the underscore_ library:
|
|||
|
|
|||
|
.. _npm: https://npmjs.org/
|
|||
|
.. _underscore: http://underscorejs.org/
|
|||
|
|
|||
|
.. code-block:: text
|
|||
|
|
|||
|
$ npm install underscore
|
|||
|
|
|||
|
|
|||
|
Then, ``require`` it like you would with any other nodejs compliant module::
|
|||
|
|
|||
|
//npm-underscore-test.js
|
|||
|
var _ = require('underscore');
|
|||
|
var casper = require('casper').create();
|
|||
|
var urls = _.uniq([
|
|||
|
'http://google.com/',
|
|||
|
'http://docs.casperjs.org/',
|
|||
|
'http://google.com/'
|
|||
|
]);
|
|||
|
|
|||
|
casper.start().eachThen(urls, function(response) {
|
|||
|
this.thenOpen(response.data, function(response) {
|
|||
|
this.echo(this.getTitle());
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
casper.run();
|
|||
|
|
|||
|
|
|||
|
Finally, you’ll probably get something like this:
|
|||
|
|
|||
|
.. code-block:: text
|
|||
|
|
|||
|
$ casperjs npm-underscore-test.js
|
|||
|
Google
|
|||
|
CasperJS documentation | CasperJS 1.1.0-DEV documentation
|
|||
|
|
|||
|
|