admin管理员组

文章数量:814820

将变量传递给(全局?)导出的类

[如果这个问题没有实际意义,我深表歉意-我可能对module.export的确切工作方式以及各类之间的作用域缺乏了解,但我会尽力进行解释。我目前有一个带有MusicPlayer类音乐播放器的discord机器人-此类以这种方式导出:

const ytdl = require('ytdl-core-discord');
const MusicQueue = require('./musicqueue');
const discordUtils = require ('../../../utils/discord-utils');

class MusicPlayer {
    constructor() {
        this.repeat_playlist = false;
        this.queue = new MusicQueue(); // this is the persistent queue for the server
        this.dispatcher = null;
        this.volume = 1; 
        this.stopped = true;
        this.paused = false;
        this.repeat_current_song = false;
        this.auto_delete = false;
        this.manual_index = false;
        this.autodcEnabled = false;
    }

    ....
}

module.exports = new MusicPlayer();

我有各种与音乐相关的命令可以像这样导入此音乐播放器:

const { Command } = require('discord.js-commando');
const discordUtils = require ('../../utils/discord-utils');
let musicplayer = require(`./modules/musicplayer`);

module.exports = class TestCommand extends Command {
    constructor(client) {
        ....
    }
    ...
}

我的问题是,由于要通过musicplayer导出局部变量,因此该如何将其传递给module.exports = new MusicPlayer();构造函数?

据我了解,使用module.exports = new MusicPlayer();将使我可以在整个项目中使用相同的musicplayer对象(这是我想要的);但是-这是我不确定module.exports如何工作的地方-无法保证musicplayer何时会被实例化。

如果您从不使用与音乐相关的命令,则将不会创建musicplayer,因为将永远不会运行let musicplayer = require('./modules/musicplayer');,对吗?

两种方法中,现在我都需要从其中一个命令中将某些内容传递给musicplayer构造函数,该如何以不必重复执行类似操作的方式来做到这一点:每个需要音乐播放器的文件?我有没有办法一次声明let musicplayer = require('./modules/musicplayer')(variable);并在整个代码库中使用let musicplayer = require('./modules/musicplayer')(variable);

回答如下:

让我们列出一些要求:

本文标签: 将变量传递给(全局)导出的类