node-webkit加载模块失败

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

|-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:创build一个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"); 

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


谢谢 !

尝试更改require以明确地从当前目录开始,方法是在path的开头添加./

 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")); 

EDIT2:

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

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

因此,如果你从app.js调用require lbcCrawler.js ,你需lbcCrawler.js

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

因为path是你开始node-webkit的地方,例如index.html所在的地方。

但是,如果你这样做

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

那么__dirname__filename被定义,并且require将会从app.js文件所在的地方search,也就是说你会这样做:

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

由于这种差异,根据process.cwd的值(在上面的第一个编辑中),在两种情况下都应该是相同的,不pipeapp.js是通过require还是script包含的,都可能会更好。