我在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
您可以查看这个示例,了解如何在同一个文件中同时使用import
和require()
。注意,在使用Typescript时,可以有另一种方法来处理这个问题。
2。动态导入(推荐)
使用动态导入// namespace
import { foo } from "./bar";
// This also works
async function someFunc() {
const { default:foo } = await import("./bar");
}