Javascript 如何从不同的文件访问所需的模块?

Javascript 如何从不同的文件访问所需的模块?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,在Node.js中,我在main.js中使用Socker.io,如下所示 const io = require('socket.io')(http); 此外,我还使用了一个子文件,比如api.js,我想用它将我的一些业务逻辑从主文件中删除。所以我也进口了这个像 const api = require('./api.js'); 在我的api.js中,我现在如何使用socket.io框架?我可以从不同的文件从上面访问该实例吗?或者我必须像这样传递io对象:api.myFooio 您所说的每个需要

在Node.js中,我在main.js中使用Socker.io,如下所示

const io = require('socket.io')(http);
此外,我还使用了一个子文件,比如api.js,我想用它将我的一些业务逻辑从主文件中删除。所以我也进口了这个像

const api = require('./api.js');
在我的api.js中,我现在如何使用socket.io框架?我可以从不同的文件从上面访问该实例吗?或者我必须像这样传递io对象:api.myFooio

您所说的每个需要“模块”的地方都会得到该模块的相同实例

但在这里,当您想要共享函数的返回值时,必须显式导出它:

const io = require('socket.io')(http);
module.exports = io;
在某些模块中,并通过以下方式在其他模块中要求:

const io = require('./your-module');
其他选项是将其作为参数传递给其他模块,如下所示:

const io = require('socket.io')(http);
const api = require('./api.js')(io);
但在这种情况下,api.js必须导出一个以io为参数的函数:

module.exports = (io) => {
    return ... // return whatever was exported before
};

回答得好!只是最后一部分让我困惑:我不能在api.js:exports.io=io;中执行类似的操作吗@MarcM我的最后一个示例展示了当调用api=require'./api.js'io时,api.js如何获取io值;在其他模块中,该模块具有io并希望将其传递给api.js。您可以执行exports.io=io;而不是module.exports=io;在我的第一个示例中,当您有io并且想要导出它时。这完全取决于io对象的传递方向——是从所需模块传递到所需模块,还是从另一个方向传递。