#javascript #discord.js
#javascript #discord.js
Вопрос:
У меня есть два файла — /utils/BroadcasterEmbed.js
и /commands/broadcaster.js
. BroadcasterEmbed.js
Целью broadcaster.js
является импорт в. Однако, когда я тестирую приведенный ниже код, я получаю следующую ошибку TypeError: BroadcasterEmbed is not a constructor
Я знаю, что это возможно, учитывая реализацию с открытым исходным кодом, с которой я столкнулся. Я что-то упускаю?
BroadcasterEmbed.js
const { RichEmbed } = require('discord.js');
module.exports = class BroadcasterEmbed extends RichEmbed {
constructor(data = {}) {
super(data);
}
}
broadcaster.js
const { BroadcasterEmbed } = require('../')
exports.run = (client, message, args) => {
...
message.channel.send(new BroadcasterEmbed().setDescription('hello'));
...
}
Комментарии:
1. Класс находится на корневом уровне. Вам не нужно разрушать. Вы пытаетесь уничтожить класс сам по себе.
2. Вам также необходимо указать явное имя файла в инструкции require, поскольку имя файла, содержащего этот класс, не index.js .
Ответ №1:
Когда вы делаете
module.exports = class BroadcasterEmbed extends RichEmbed {
Это означает, что весь модуль, когда require
он используется, оценивает то, что находится на другой стороне =
, то есть класса. Не пытайтесь деструктурировать, вместо этого просто требуйте простой класс:
const BroadcasterEmbed = require('../')
Вы бы использовали деструктурирование, если бы назначили класс свойству исходного module.exports
объекта, например:
module.exports.BroadcasterEmbed = class...
и затем
const { BroadcasterEmbed } = require('../')
Комментарии:
1.Спасибо, похоже, это работает! Если вы не возражаете — есть ли причина, по которой это работает в следующем экземпляре? github.com/SwitchbladeBot/switchblade/blob/…github.com/SwitchbladeBot/switchblade/blob /…
2. Я не уверен в Discord, я никогда его не использовал, я не знаю, где
RichEmbed
определено в их источнике. Но для другой ссылки index.js file экспортирует объект, который{ EventListener, SwitchbladeEmbed, Constants }
, среди прочего, обладает этими 3 свойствами, поэтому деструктурирование работает.3. Я полностью пропустил
index.js
. Это многое объясняет. Ваше объяснение было очень полезным! Спасибо!
Ответ №2:
Broadcaster.js должен иметь этот импорт statenent:
const BroadcasterEmbed = require('../BroadcasterEmbed.js')
Класс находится на корневом уровне. Вам не нужно разрушать. Вы пытаетесь уничтожить класс сам по себе.
Вам также необходимо указать явное имя файла в инструкции require, поскольку имя файла, содержащего этот класс, не index.js
является .