Discord.js with ES6: SyntaxError: Unexpected identifier



我在ES6语法上转换我的bot。因为我不能使用:const command = require(`./commands/${file}`),我试着用import command from `./commands/${file}`;。它没有工作,它给了我一个奇怪的错误:

file:///D:/Documenti/Coding/Discord/XayBot/XayBotMain/src/index.js:15
import command from `./commands/${file}`;
^^^^^^^
SyntaxError: Unexpected identifier

下面是它正在运行的代码:

import { Client, Collection } from "discord.js";
import { readdir } from "fs-extra";
const client = new Client({
intents: ["GUILDS", "GUILD_MEMBERS", "GUILD_MESSAGES"],
});
client.commands = new Collection();
client.once("ready", async () => {
try {
const commandFiles = readdir("./src/commands").filter(
file.endsWith(".js"),
);
commandFiles.forEach(async (file) => {
import command from `./commands/${file}`;
client.commands.set(command.name, command);
});
} catch (err) {
console.error(err);
}
});
client.login(process.env.D_TOKEN);

我在包中使用"type": "module"。json,这不是问题,我想我可能用错了,如果是,我该怎么解决?

Nodejs ver: 16.9.0 | Npm ver: 7.22 |Discord.js ver: 13.1.0

导入

如果您要从一组导出中导入一个资产,您必须使用{}来封装要导入的变量。

import { command } from `.commands/${file}`;

如果您打算导入整个文件,您可以使用以下语法:

import * as command from `.commands/${file}`;

然而您当前的示例将仍然抛出错误,因为您只能通过名称空间(在本例中是文件的最顶部)

导入文件(同时使用import/export)。

解决方案如果您想在名称空间之外导入,您需要使用Dynamic import或require()。最好是前者。

1。import + require

您可以查看这个示例,了解如何在同一个文件中同时使用importrequire()。注意,在使用Typescript时,可以有另一种方法来处理这个问题。

2。动态导入(推荐)

使用动态导入
// namespace
import { foo } from "./bar";
// This also works
async function someFunc() {
const { default:foo } = await import("./bar");
}

最新更新