节点网络工具包加载模块失败

node-webkit loading module fails

本文关键字:模块 失败 加载 工具包 网络 网络工具 节点      更新时间:2023-09-26

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

|-index.html
|-js/
|---app.js
|---resources/
|-----angular..jquery..
|---crawler/
|-----leboncoin/
|-------lbcCrawler.js
我想在"

app.js"中加载模块"mycrawler",但出现以下错误:

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)

我的文件 :索引.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>

应用.js

var app = angular.module("app", []);
var cc = require("crawler/leboncoin/lbcCrawler.js");

lbc爬虫.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,其他文件夹用于仅节点部分。我试图在我的想法中做一些更逻辑的事情:创建一个索引.js并将.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");
我无法

让它工作,我无法相信这是不可能的,否则我无法想象我的 projet 文件夹会是什么样子......平:(。


谢谢!

尝试通过将./添加到路径的开头来更改require以显式从当前目录开始:

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

否则,节点将在node_modules目录中查找,或类似目录,cf: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"));

编辑2:

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

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

因此,如果您调用 require lbcCrawler.js from app.js则需要它作为

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

因为路径是你启动 node-webkit 的地方,例如 index.html 所在的位置。

但是,如果您这样做

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

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

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

由于这种差异,您可能最好根据process.cwd的值(如上面的第一次编辑)在这两种情况下都应该相同,无论 app.js 是通过 require 还是 script 包含在内。