节点js和phantomjs - 找不到模块'弱'

时间:2014-05-09 18:19:48

标签: phantomjs

我在Linux Mint 16'perara'64位上运行,我试图第一次使用'phantomjs'和节点js。

我在全球范围内安装了phantomjs:

sudo npm install -g phantomjs

...并确认它正在运行(我通过在终端中运行“phantomjs”来获得phantomjs提示)

我在节点项目中安装了节点'phantom'模块:

npm install phantom

到目前为止一切顺利。

但是,在我的应用程序代码中,只要它尝试执行此行:

var phantom = require('phantom');

...程序崩溃时出现以下痕迹:

Listening on port 3000
about to instantiate phantom module...
module.js:333
    throw err;
          ^
Error: Cannot find module 'weak'
    at Function.Module._resolveFilename (module.js:331:15)
    at Function.Module._load (module.js:273:25)
    at Module.require (module.js:357:17)
    at require (module.js:373:17)
    at new D (/home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/node_modules/dnode/index.js:28:20)
    at module.exports (/home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/node_modules/dnode/index.js:8:12)
    at /home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/phantom.js:135:13
    at Server.handler (/home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/node_modules/shoe/index.js:22:9)
    at Server.EventEmitter.emit (events.js:104:17)
    at App.emit (/home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/node_modules/shoe/node_modules/sockjs/lib/sockjs.js:182:27)
    at Session.emit_open (/home/joe/Documents/My Stuff/Programming/Angular.js Projects/NodeJS Messing/FreeAgentScraper/node_modules/phantom/node_modules/shoe/node_modules/sockjs/lib/transport.js:107:23)

我可以确认项目中的任何地方确实没有'weak.js'。

我已经运行'npm install'以确保已安装所有依赖项。

谷歌搜索没有透露任何值得的东西。有人可以提供任何建议吗?

3 个答案:

答案 0 :(得分:19)

我在windows机器上使用node.js和幻像有同样的问题,我发现你需要在windows环境中进行一些特殊处理。 npm文档是here

var phantom = require('phantom');
phantom.create(function(ph) {
    return ph.createPage(function(page) {
      return page.open("http://www.google.com", function(status) {
         console.log("opened google? ", status);
         return page.evaluate((function() {
            return document.title;
      }), function(result) {
        console.log('Page title is ' + result);
        return ph.exit();
      });
    });
  });
}, {
    dnodeOpts: {weak: false}
});

注意phantom.create(函数,选项,回调),这里的选项使用dnodeOpts:{weak:false}

答案 1 :(得分:3)

您是否在系统中安装了build-essential?因为weak是需要在本地编译的模块。一周前我通过安装build-essential(sudo apt-get install build-essential)让它在Ubuntu系统中工作,但现在当我尝试使用Linux Mint时,它会给你带来同样的错误。在npm install -g phantom期间,它会警告无法安装weak 0.3.1

您找到了解决方案吗?

修改

顺便说一下,我成功的系统与当前系统之间的关键区别在于,第一个是32位,后者失败的是64位。模块“弱”是否有任何阻止它安装在64位盒子上的问题?

工作解决方案

我按照以下步骤解决了这个问题:

  1. sudo add-apt-repository ppa:fkrull/deadsnakes
  2. sudo apt-get update
  3. sudo apt-get install python2.6
  4. sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.6 20
  5. python --version应该给你2.6.x.当Python版本高于2.6.x时,不会安装弱模块。
  6. 在此之后确保您的节点和npm是最新版本。我有节点v0.10.28和npm v1.4.9。

    如果您已安装幻像模块,请运行npm uninstall phantom将其删除。然后运行npm cache clean

    现在,单独安装弱版:npm install weak。如果这样,请运行npm install phantom安装幻像。

    这应解决问题。

答案 2 :(得分:0)

I had the same issue and this code fixed my issue. Phantom version = 1.9.8 Phantom npm module version = 0.8.4

`

var phantom=require('phantom');
phantom.create(function( ph ){  
    },{
        dnodeOpts: {
            weak: false
        },
        parameters:{
            'web-security': 'no'
        }
});

`