使用casperjs中的节点模块

Dar*_*ook 12 node.js npm phantomjs casperjs

是否可以安装通过npm安装的节点模块,然后require从casperjs脚本安装它?

(我在node.js中看到很多用于运行casper或phantom的帖子和工具,但这不是我想要做的.)

casperjs文档似乎表示这是可能的,但只能用手写的玩具模块显示,它们并没有真正做任何事情.我正在尝试安装的真实模块是imap,但是在这一点上我无法使用任何模块,甚至是内置的模块net.简单的例子:

npm install imap
echo "var test = require('imap');" > test.js
casperjs test.js
Run Code Online (Sandbox Code Playgroud)

给我:

CasperError: Can't find module imap

/usr/local/src/casperjs/bin/bootstrap.js:263 in patchedRequire
test.js:1
Run Code Online (Sandbox Code Playgroud)

(我可以看到imap模块npm ls,我可以从node.js脚本中使用它.)

或者使用内置模块:

echo "var test = require('net');" > test.js
casperjs test.js
Run Code Online (Sandbox Code Playgroud)

抱怨"找不到模块网"


我有npm --version1.4.14和nodejs --versionv0.10.29.我想知道那些太旧了吗?(Casper是1.1.0-beta,Phantom是1.9.7,两者都是最新版本.)

Art*_* B. 13

PhantomJS和SlimerJS(用于CasperJS的引擎)不是Node.js模块.为方便起见,它们可以通过npm安装.它们具有与Node.js不同的模块的不同基础结构.

您将无法使用imap或依赖于该net模块的任何模块.正如Fanch所指出的,有些模块可以在phantomjs运行时内部工作.

如果模块仅使用某些本机node.js模块的某些功能,您可以尝试更改实现以使用phantomjs提供的API.我不认为这很容易.大多数时候你会遇到一堵墙.

在这种情况下imap,它是相当绝望的.你甚至无法重新实现require("net").Socket,因为phantomjs不支持WebSockets(至少在1.9.7中).

  • 这个解释应该在文档中添加.**像PhantomJS一样,CasperJS允许使用通过npm安装的nodejs模块.** - >这句话很混乱 (5认同)
  • @Fanch我创建了一个PR来使文档更清晰:https://github.com/n1k0/casperjs/pull/1406 (2认同)

Fan*_*nch 5

这里有一个颜色模块的例子:

var colors = require('colors');


 casper.test.begin('\n*Colors module*\n', function suite(test) {
    casper.start()
    .thenOpen('https://www.google.fr/', function() {
        console.log("test require\n".zebra);
        console.log("test require\n".rainbow);
        console.log("test require\n".red.underline.bold);
      })
    .run(function() {
            test.done();
    });
});
Run Code Online (Sandbox Code Playgroud)
  • 节点模块
    • 颜色
  • testnode.js

casperjs test testnode.js

输出:

casper + colors module -npm-

当所需模块具有依赖性时,似乎并不那么简单.