我从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文件夹将如何......平。:(。
谢谢!
答案 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
和__filename
,require
将从app.js文件所在的位置进行搜索,即您可以执行以下操作:
var cc = require(path.join("./crawler/leboncoin/lbcCrawler.js"));
由于存在这种差异,根据process.cwd
的值(在上面的第一个编辑中),你可能会更好,在任何一种情况下都应该相同,是否通过{{1包含app.js }或require
。