2014-04-03 63 views
2

我以node-webkit開始,我無法加載我在我的項目中創建的模塊(JS文件)。 這裏是樹視圖: 根node-webkit加載模塊失敗

|-index.html 
|-js/ 
|---app.js 
|---resources/ 
|-----angular..jquery.. 
|---crawler/ 
|-----leboncoin/ 
|-------lbcCrawler.js 

我要加載的模塊「mycrawler」中的「app.js」,但我得到了以下錯誤:

Error: Cannot find module 'js/crawler/leboncoin/lbcCrawler.js' 
    at Function.Module._resolveFilename (module.js:334:15) 
    at Function.Module._load (module.js:273:25) 
    at Module.require (module.js:360:17) 
    at require (module.js:376:17) 
    at window.require (eval at undefined, <anonymous>:1:112) 
    at eval (file:///C:/Users/acouty/git/webkit%20fooling/js/ui/app.js:3:10) 

我的文件: 的index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <link rel="stylesheet" href="css/style.css"> 
    <script src="js/resources/angular/angular.min.js"></script> 
    <script src="js/resources/jquery-ui-1.10.3/js/jquery-1.9.1.js"></script> 
    <script src="js/resources/jquery-ui-1.10.3/js/jquery-ui-1.10.3.custom.min.js"></script> 
    <script src="js/ui/app.js"></script> 
</head> 
<body> 
</body> 

</html> 

app.js

var app = angular.module("app", []); 

var cc = require("crawler/leboncoin/lbcCrawler.js"); 

lbcCrawler.js

var simpleCrawler = require("simplecrawler"); 

var BASE_URL = "http://www.leboncoin.fr/annonces/offres/:region/occasions/?f=a&th=1&q=:item"; 
var DEFAULT_REGION = "ile_de_france"; 

var crawl = function(item, region, results) 
{ 
    if (_.isUndefined(region) || _.isNull(region)) 
    { 
     region = DEFAULT_REGION; 
    } 
    console.log("Looking for %s in %s", item, region); 

    var queryURL = BASE_URL.replace(":region", region).replace(":item", item); 

    var lbcCrawler = simpleCrawler.crawl(queryURL); 
    lbcCrawler.interval(500); 
    lbcCrawler.on("fetchComplete", function(queueItem, responseBuffer, response) { 
     results.push(queueItem); 
    }); 

    lbcCrawler.start(); 
} 

編輯

我嘗試別的東西: 我想是use my modules like dependencies。 ui部分用於angularJS,其他文件夾僅用於節點部分。 我試着在我的想法中做更多的logcal:創建一個index.js和package.json文件到lebecoincrawler目錄中。 現在,我想要一個ui /文件夾文件來要求這個。但是我不能......

I tried : 
var cc = require("../crawler/leboncoin/lbcCrawler.js"); 
var cc = require("./../crawler/leboncoin/lbcCrawler.js"); 
var cc = require("./js/crawler/leboncoin/lbcCrawler.js"); 

我不能讓它工作,我不能相信這是不可能的事,否則我無法想象我謨文件夾怎麼會..平:(。


感謝

回答

3

嘗試改變require下手明確當前目錄,加入./到您的路徑的開頭:!

var cc = require("./crawler/leboncoin/lbcCrawler.js"); 

否則,節點將看在一個node_modules目錄,或類似的,比照: http://www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm

編輯:

出於某種原因,這不是在節點WebKit的工作,但是這可能做的伎倆:

path = require('path'); 
var cc = require(path.join(process.cwd(),"js/crawler/leboncoin/lbcCrawler.js")); 

EDIT2:

我想我知道了,現在想通了。 __dirname__filename在節點REPL沒有定義,也沒有一個節點WebKit的腳本標籤,即使你的腳本標籤是用來包含你的.js文件,如

<script src="js/app.js"></script> 

因此,如果調用需要lbcCrawler.jsapp.js你開始節點的WebKit,如你需要需要它作爲

var cc = require("./js/crawler/leboncoin/lbcCrawler.js"); 

因爲路徑index.html所在的位置。

但是,如果你這樣做

<script>require('js/app.js')</script> 

然後__dirname__filename定義和require將在app.js文件的生活,也就是你會做搜索:

var cc = require(path.join("./crawler/leboncoin/lbcCrawler.js")); 

正因爲如此差異,根據process.cwd的值(如上面的第一個編輯),在兩種情況下都應該是相同的,不管app.js是否通過require或01包含。

+0

oooo好吧! 我閱讀了文檔,但因爲英文不是我的第一語言,我誤解了!當我回去工作時,我會明天嘗試:)。 – ogdabou

+0

re OldGeeksGuide,我試過其他的東西,你可以在我的問題的編輯部分看到這個:)。謝謝 – ogdabou

+0

嗯,這是意想不到的。你現在好奇我。同時,如何試試這個:path = require('path'); var cc = require(path.join(process.cwd(),「js/crawler/leboncoin/lbcCrawler.js」)); – OldGeeksGuide

相關問題