我想了解HAP-Node.js的工作原理,但我无法遵循Node.js代码。我对Node.js很新,但不是编程新手。
在下面的这个例子中(可以在GitHub上找到HAP-NodeJS项目),我无法理解执行是如何开始的。我认为顶部的require函数只返回模块中的导出对象,但require()'ed模块中没有任何内容被执行。然后我也看到index.js文件似乎没有任何实际执行。它似乎只定义了一个从某个神秘调用者调用的对象和init函数。
作为比较,在C或Java程序中,有一个入口点函数Main()被调用以启动所有内容。 “flow”如何在这个Node.js项目中工作?我能找到什么才能理解这一点?是否有某种Node.js预处理器可以将所有代码放入其中作为一个整体来看?
请不要回答这个问题,建议我将它发布在GitHub上,因为我真的认为我在问一个Node.js的一般性问题。
var Accessory = require('./lib/Accessory.js').Accessory;
var Bridge = require('./lib/Bridge.js').Bridge;
var Camera = require('./lib/Camera.js').Camera;
var Service = require('./lib/Service.js').Service;
var Characteristic = require('./lib/Characteristic.js').Characteristic;
var uuid = require('./lib/util/uuid');
var AccessoryLoader = require('./lib/AccessoryLoader.js');
var StreamController = require('./lib/StreamController.js').StreamController;
var storage = require('node-persist');
// ensure Characteristic subclasses are defined
var HomeKitTypes = require('./lib/gen/HomeKitTypes');
module.exports = {
init: init,
Accessory: Accessory,
Bridge: Bridge,
Camera: Camera,
Service: Service,
Characteristic: Characteristic,
uuid: uuid,
AccessoryLoader: AccessoryLoader,
StreamController: StreamController
}
function init(storagePath) {
// initialize our underlying storage system, passing on the directory if needed
if (typeof storagePath !== 'undefined')
storage.initSync({ dir: storagePath });
else
storage.initSync(); // use whatever is default
}
答案 0 :(得分:1)
在Node.js中,与所有JavaScript一样,流程始终是从上到下的。与其他语言没有main()
或类似。
特别是Node.js,要运行的第一个文件是您直接运行的文件(通常按惯例命名为index.js
,但不是必需的。)
node index.js
如果您为node
提供文件夹名称,index.js
会自动运行node myApp
文件,您也可以这样做:
myApp/index.js
将运行require
。
当我启动它时,该文件将被读取并从上到下运行。当我点击module.exports
之类的内容时,它会暂停从上到下阅读这些文件。
大多数要求会导出一个或多个对象,因此他们不会做出这样的事情。什么都行。
但不是全部。我可以轻松地拥有一个只运行代码的需求(这是代码的常见问题,如polyfills,它会在包含时覆盖全局对象)。
在上面的特定示例中,您确定该文件没有对其执行任何操作。该文件本身也只是导出一些东西(node
)。
这意味着直接使用init()
运行该文件并不会做任何事情。相反,可能有一些其他文件正在拉入该文件并调用const setup = require('./setup.js'); // the file you have
setup.init(); // kick things off
函数来启动。可能是这样的:
index.js
然后,如果我将该文件命名为node index.js
,我可以用以下方式解决所有问题:
$(window).resize(function () {
top1 = $('#home').offset().top;
top2 = $('#profile').offset().top;
top3 = $('#portfolio').offset().top;
top4 = $('#contact').offset().top;
});