2015-05-19 61 views
0

我正在嘗試做一個節點騎馬的例子,但我發現有一個問題。我試圖效仿的榜樣是:節點,js沒有找到任何模塊

var Horseman = require('node-horseman'); 
var horseman = new Horseman(); 

var numLinks = horseman 
    .open('http://www.google.com') 
    .type('input[name="q"]', 'github') 
    .click("button:contains('Google Search')") 
    .waitForNextPage() 
    .count("li.g"); 

console.log("Number of links: " + numLinks); 

horseman.close(); 

而且它拋出的錯誤,當我做phantomjs example.js是這些:

Error: Cannot find module 'http' 

    phantomjs://bootstrap.js:299 in require 
    phantomjs://bootstrap.js:263 in require 
    :3 
Error: Cannot find module 'tty' 

    phantomjs://bootstrap.js:299 in require 
    phantomjs://bootstrap.js:263 in require 
    :6 
TypeError: Object is not a constructor (evaluating 'require('debug')('horseman')') 

    :5 
TypeError: Object is not a constructor (evaluating 'new Horseman()') 

    phant.js:2 in global code 

我嘗試在本地使用NPM安裝HTTP安裝HTTP,但在此之後,只有在例如的package.json/node_modules/HTTP,如果我用在這個位置NPM安裝,它拋出三次警告:

  • 實在是太核心模塊的名稱
  • 沒有說明
  • 沒有庫場

關於TTY,使其拋出一個404錯誤本地安裝。

我試試這個解決方案(包括路徑上的npm文件夾)Nodejs Cannot find module但它沒有工作。

任何建議?

謝謝。


編輯 解不了

我重新安裝節點(我現在的版本是節點0.12.3,NPM 2.9.1和1.9.8 phantomjs),當我嘗試這個簡單的例子從網絡的NodeJS:

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(1337, '127.0.0.1'); 
console.log('Server running at http://127.0.0.1:1337/'); 

如果我跑「節點example.js」它的工作原理,但如果我這樣做「phantomjs example.js」問題仍然存在「找不到模塊HTTP」。

我試着通過npm(「npm install -g phantomjs」)安裝phantomjs,並通過在網上下載zip文件,解壓並添加到PATH解壓縮文件夾的路徑。

還有一個數據(也許可以是一個幫助)我的SO是Windows 8.1。

重新編輯

我看那個地方我已經安裝節點的文件夾,在node_modules唯一的文件夾NPM,是不是?在C:\ Users \ Eloy \ AppData \ Roaming中我有兩個npm文件夾,其中一個是npm-cache,另一個是npm。最後一個節點的node_modules不包含http模塊,npm-cache有很多模塊,並且http包含...是否重要?

謝謝。

+0

「http」模塊是標準node.js安裝的一部分。這聽起來像你沒有正確安裝節點,以致正在運行的節點實例找不到內置模塊。 – jfriend00

+0

謝謝@ friend00但是...我想記住我運行了一個快速應用程序......並且它需要http模塊,沒有?然而,明天我會卸載並重新安裝...這是正確的方式,還是有更好的? –

+1

你可以編寫一個非常簡短的測試應用程序來完成'var http = require('http');'然後使用該模塊來查看它是否工作。不同的操作系統上有不同的node.js安裝問題(例如,Windows與Linux非常不同)。 – jfriend00

回答

0

+1你在第一個EDIT中的觀察,即腳本運行像$ phantomjs不能通過require()訪問全局模塊,但它可以訪問本地模塊。不確定這是否是虛幻文件記錄的缺點