gpt4 book ai didi

javascript - Node.JS 模块/对象跨越多个文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:50 24 4
gpt4 key购买 nike

我正在致力于支持一种 REST API,该 API 实际上具有数千个函数/对象/统计信息/等,并且将所有这些调用放入一个文件中并不让我觉得非常易于维护。我想要做的是拥有一个“基本”文件,其中包含主要构造函数、一些实用程序和非常常见的函数,然后是 API 调用的每个部分的文件。

问题:如何将其他文件中的函数附加到“基本”对象,以便引用主对象允许从已添加到程序中的子部分进行访问?

让我尝试说明我想要做什么:

1) “base”文件具有主构造函数:

var IPAddr = "";
var Token = "";
exports.Main = function(opts) {
IPAddr = opts.IPAddr;
Token = opts.Token;
}

2)“file1”有一些我想定义的子函数:

Main.prototype.Function1 = function(callback) {
// stuff done here
callback(error, data);
}

Main.prototype.Function2 = function(callback) {
// stuff done here
callback(error,data);
}

3) 程序文件将所有内容组合在一起:

var Main = require('main.js');
var Main?!? = require('file1.js');

Main.Function1(function(err,out) {
if(err) {
// error stuff here
}
// main stuff here
}

有没有办法从多个代码文件中组合一个对象? 120,000 行的 Node.JS 文件似乎不适合我……更不用说加载时间太长了!谢谢:)

解决方案:对于那些将来可能会偶然发现此问题的人...我获取了 Object.assign 的源代码,并将其向后移植到我的 v0.12 版本的 Node 中并使其正常工作。

我使用了这里的代码:https://github.com/sindresorhus/object-assign/blob/master/index.js并将其放在一个单独的文件中,我只是 require('./object-assign.js') 而不将其分配给 var。然后我的代码看起来像这样:

require('./object-assign.js');
var Main = require('./Main.js');
Object.assign(Main.prototype, require('./file1.js'));
Object.assign(Main.prototype, require('./file2.js'));

这两个文件中的所有函数都显示在 Main() 对象下...太酷了:)

最佳答案

首先,每个文件都在自己的范围内工作,因此所有局部变量都不共享。

<小时/>

但是,作为hacky方法,您可以在定义后立即编写global.Main = Main,将Main添加到随处可用的全局范围中,请确保您在需求列表中首先需要主文件。

<小时/>

更好(谁说的?)方法是稍后扩展 Main 的原型(prototype),但在这种情况下,您可能需要更新大量代码。只是mix-in基类中的附加功能

文件1.js

module.exports = {
x: function() {/*****/}
}

index.js

var Main = require('main.js');
Object.assign(Main.prototype, require('file1.js'));

关于javascript - Node.JS 模块/对象跨越多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com