【问题标题】:node-webkit loading module failsnode-webkit 加载模块失败
【发布时间】:2014-04-03 15:56:30
【问题描述】:

我从 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)

我的文件: 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,其他文件夹用于仅节点部分。 我试图在我的想法中做一些更符合逻辑的事情:在 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 文件夹会是怎样的......平坦:(。


谢谢!

【问题讨论】:

    标签: javascript node.js node-webkit


    【解决方案1】:

    尝试更改 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"));
    

    编辑2:

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

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

    因此,如果您从 app.js 调用 require lbcCrawler.js,则需要将其要求为

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

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

    但是,如果你这样做了

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

    然后 __dirname__filename 被定义,require 将从 app.js 文件所在的位置搜索,即你会这样做:

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

    由于这种差异,您可能会更好地取决于process.cwd 的值(如上面的第一个编辑),无论是通过require 还是@ 包含app.js,在任何一种情况下都应该相同987654340@.

    【讨论】:

    • 好啊!我阅读了文档,但由于英语不是我的第一语言,我误解了!我明天回去工作时试试看:)。
    • re OldGeeksGuide,我尝试了其他方法,您可以在我的问题的编辑部分中看到这一点:)。谢谢
    • 嗯,这出乎意料。你现在让我很好奇。同时,试试这个怎么样: path = require('path'); var cc = require(path.join(process.cwd(),"js/crawler/leboncoin/lbcCrawler.js"));
    • 不错!谢谢你:D!
    • Imo 更好的解决方案是将模块放在应用程序的 /node_modules 中。这是“官方”解决方案:github.com/rogerwang/node-webkit/wiki/Using-Node-modules
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多