首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用casperjs中的节点模块

使用casperjs中的节点模块
EN

Stack Overflow用户
提问于 2014-06-24 13:25:04
回答 3查看 8.3K关注 0票数 12

是否可以安装通过npm安装的节点模块,然后通过casperjs脚本对其进行require

(我看到了很多在node.js内部运行casper或幻影的帖子和工具,但这不是我想要做的。)

casperjs文档似乎说这是可能的,但只显示手写的玩具模块,但实际上什么也不做。我正在尝试安装的真实模块是imap,但此时我无法让任何模块工作,甚至是内置的模块,比如net。简单的例子:

代码语言:javascript
运行
复制
npm install imap
echo "var test = require('imap');" > test.js
casperjs test.js

给我:

代码语言:javascript
运行
复制
CasperError: Can't find module imap

/usr/local/src/casperjs/bin/bootstrap.js:263 in patchedRequire
test.js:1

(我可以从npm ls中看到imap模块,并且可以通过node.js脚本很好地使用它。)

或者使用内置模块:

代码语言:javascript
运行
复制
echo "var test = require('net');" > test.js
casperjs test.js

抱怨“找不到模块网”

我的npm --version为1.4.14,nodejs --version为0.10.29。我想知道这些是不是太老了?(Casper是1.1.0-beta,幻影是1.9.7,这两个版本都是最新版本。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-24 14:53:53

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

您将无法使用imap或依赖于net模块的任何模块。正如范奇所指出的,有一些模块可以在幻影运行时内工作。

如果模块只使用某些本机node.js模块的某些功能,则可以尝试更改实现,以使用幻影提供的API。不过,我不认为这很容易。大多数时候你都会撞到墙上。

imap而言,这是相当没有希望的。您甚至不能重新实现require("net").Socket,因为幻影中不支持WebSockets (至少在1.9.7中)。

票数 13
EN

Stack Overflow用户

发布于 2014-06-24 14:13:42

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

代码语言:javascript
运行
复制
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();
    });
});
  • 节点模块
    • 颜色

  • testnode.js

casperjs test testnode.js

产出:

当所需模块具有依赖关系时,似乎并不那么简单。

票数 5
EN

Stack Overflow用户

发布于 2015-04-22 03:44:15

在我的情况下,我想要装载得分不足的。下划线是一系列函数,与javascript对象没有复杂的交互,所以只需要javascript文件然后访问它的函数就没有问题了。

我首先找到了nodejs安装的根目录(来自CLI):

代码语言:javascript
运行
复制
node --help

这导致我找到了我的节点路径:

代码语言:javascript
运行
复制
echo $NODE_PATH

其网址为:

代码语言:javascript
运行
复制
/usr/local/lib/node_modules/

下划线

代码语言:javascript
运行
复制
/usr/local/lib/node_modules/underscore/underscore.js

因此,我在CasperJS脚本中的最后一个require语句是。

代码语言:javascript
运行
复制
var _ = require('/usr/local/lib/node_modules/underscore/underscore.js');

现在,在我的脚本中,我测试是否加载了underscorejs:

代码语言:javascript
运行
复制
this.echo(_.now());

我看到了现在的时间。

注意:由于这是异步运行的,如果您将_.now()语句放在需求之后,它将给您提供一个未定义的对象错误。请注意,我使用Casper1.1,它使用PhantomJS的本机require()函数。如果您使用的是< Casper 1.1,我不认为require会起作用。

更新:由于是这样的,所以我使用CasperJS然后()函数同步加载我的实用程序,确保在全局范围内声明我的变量。这是怎么看的:

代码语言:javascript
运行
复制
//at the top of the file-ish, declare variables that will hold loaded libraries.
var utils, _;
var casper = require('casper').create(); //create casper
casper.start('http://example.com'); //start casper at URL.

casper.then(function loadRequires(){ //load the requirements
    utils = require('utils', function(){this.echo('utils loded')});
    _ = require('/usr/local/lib/node_modules/underscore/underscore.js');
});

casper.then(function myAwesomeStuff() {
    this.echo(_.now()); //now, access the loaded requirements
    utils.dump('this stuff is soooo awesome!!!!!!!!!!!!!!!!!!!!');
    //do stuff on the page you opened in the start function here.
    );
});

您可以在API docs:http://casperjs.readthedocs.org/en/latest/modules/casper.html#casper-prototype上阅读更多关于Casper原型和the ()方法的信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24387854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档