一尘不染

使用casperjs中的节点模块

node.js

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

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

casperjs文档似乎说这是可能的,但只能使用手写玩具模块进行显示,而实际上并没有做任何事情。我要安装的实际模块是imap,但目前无法使任何模块正常工作,即使是内置模块也是如此net。简单的例子:

npm install imap
echo "var test = require('imap');" > test.js
casperjs test.js

给我:

CasperError: Can't find module imap

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

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

或者使用内置模块:

echo "var test = require('net');" > test.js
casperjs test.js

抱怨“找不到模块网”


我有npm --version1.4.14和nodejs --versionv0.10.29。我想知道这两个都太老了吗?(Casper是1.1.0-beta,而Phantom是1.9.7,这两个都是最新版本。)


阅读 206

收藏
2020-07-07

共1个答案

一尘不染

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

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

如果模块仅使用某些本机node.js模块的功能,则可以尝试将实现更改为使用phantomjs提供的API。我认为这并不容易。大多数时候,您会碰壁。

在的情况下imap,这是毫无希望的。您甚至无法重新实现require("net").Socket,因为phantomjs(至少在1.9.7中)不支持WebSockets。

2020-07-07