You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Discord Bot时导入dotenv报语法错误:import语句不能在模块外使用

问题原因

这个错误的核心是Node.js默认将.js文件识别为CommonJS模块,而你使用了ES模块的import语法,两种模块系统不兼容,因此抛出语法错误。

修复步骤

有两种简单的修复方式,推荐第一种:

  • 在项目根目录的package.json中添加"type": "module"字段,确保文件内容类似:
    {
      "name": "your-discord-bot",
      "version": "1.0.0",
      "type": "module",
      "dependencies": {
        "discord.js": "^14.11.0",
        "dotenv": "^16.3.1",
        "nodemon": "^3.0.1"
      }
    }
    
    保存后重新用nodemon启动项目,import语法即可正常识别。
  • 第二种方式是将代码文件名从.js改成.mjs,Node.js会自动将.mjs文件当作ES模块处理,但这种方式需要修改所有相关文件的扩展名,不如第一种方便。
未来避免此类问题的方法
  • 初始化Node.js项目时,就明确模块系统:在package.json中设置"type": "module"(使用ES模块)或者不设置(默认CommonJS),后续代码统一使用对应模块的语法,不要混用import和require。
  • 使用较新版本的Node.js:ES模块从Node.js 14.13.0开始稳定支持,新版本能减少兼容性问题。
  • 查看依赖库文档:确保你使用的库支持所选模块系统,目前主流库(如discord.js、dotenv)都同时支持两种模块系统。
更高效的实现方式
  • 简化dotenv的导入:可以直接用import 'dotenv/config'代替导入config函数再调用,一行代码完成环境变量加载,修改后的代码如下:
    import 'dotenv/config';
    import { Client } from 'discord.js';
    
    const client = new Client({ intents: ['Guilds', 'GuildMessages'] });
    const TOKEN = process.env.t;
    
    client.login(TOKEN);
    
  • 补充:discord.js v14+本身会自动尝试读取根目录的.env文件,但显式导入dotenv能让逻辑更清晰,避免后续环境变量加载异常时排查困难。

内容的提问来源于stack exchange,提问作者TheOdinBorson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:20:44