Ad

How To Include Variables And Functions Common To A Number Of CasperJS Scripts?

Let's say I need CasperJS to report progress steps to a localhost server. I couldn't user casper.open to send a POST request because it'd "switch" pages so to speak and would be unable to continue other steps properly.

I sidestepped this issue by evaluating an XMLHttpRequest() inside the browser to ping to localhost. Not ideal but it works.

As the number of the scripts grow, I'd rather move this common functionality into a module, which is to say, I want to move a number of functions into a separate module.

It's my understanding CasperJS doesn't work like node.js does so require() rules are different. How do I go about accomplishing this?

Ad

Answer

Since CasperJS is based on PhantomJS you can use its module system, which is "modelled after CommonJS Modules 1.1"

  1. You can require the module file by its path, full or relative.

    var tools = require("./tools.js");
    var tools = require("./lib/utils/tools.js");
    var tools = require("/home/scraping/project/lib/utils/tools.js");
    
  2. Or you can follow node.js convention and create a subfolder node_modules/module_name in your project's folder, and place module's code into index.js file. It would then reside in this path:

    ./node_modules/tools/index.js
    

After that require it in CasperJS script:

var tools = require("tools");

Module would export its functions in this way:

function test(){
    console.log("This is test");
}

module.exports = {
    test: test
};
Ad
source: stackoverflow.com
Ad