2014-04-03 44 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

相关问题