node-webkit加载模块失败

时间:2014-04-03 15:56:30

标签: javascript node.js node-webkit

我从node-webkit开始,我无法加载我在项目中创建的模块(JS文件)。 这是树视图: 根

|-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:在lebecoincrawler目录中创建一个index.js和package.json文件。 现在,我想要一个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");

我无法让它工作,我无法相信它是不可能做到的,否则我无法想象我的projet文件夹将如何......平。:(。


谢谢!

1 个答案:

答案 0 :(得分: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

编辑:

出于某种原因,这不适用于node-webkit,但这可能会起到作用:

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

EDIT2:

我想我现在已经弄明白了。 __dirname__filename未在节点REPL中定义,也未在node-webkit脚本标记中定义,即使您的脚本标记用于包含.js文件,如

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

因此,如果您从lbcCrawler.js致电需要app.js,则需要将其作为

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

因为路径是您启动node-webkit的地方,例如index.html生活在哪里。

但是,如果你这样做

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

然后定义__dirname__filenamerequire将从app.js文件所在的位置进行搜索,即您可以执行以下操作:

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

由于存在这种差异,根据process.cwd的值(在上面的第一个编辑中),你可能会更好,在任何一种情况下都应该相同,是否通过{{1包含app.js }或require