Telegraf开发Telegram Bot导入session中间件报错问题求助
问题根因
两个异常均由Telegraf版本与导入方式不匹配导致:
- 从主包解构
session后编辑器划掉bot.use(session()),是因为你安装的是Telegraf 4.12.0及以上的新版本,该版本起session中间件已从核心包剥离,主包不再导出session变量,解构得到的值实际为undefined,调用自然触发异常。 - 子路径导入
telegraf/session抛出ERR_PACKAGE_PATH_NOT_EXPORTED错误,是因为新版本package.json的exports规则中已移除该子路径声明,旧版导入逻辑不再被支持。
解决方案
根据你的项目需求二选一即可:
方案1:适配官方新版本(推荐)
新版本将session拆分为独立维护的包,按以下步骤调整:
- 安装独立session依赖:
npm install @telegraf/session
- 修改导入代码:
const { Telegraf, Scenes, Markup, Composer, Context } = require('telegraf'); const session = require('@telegraf/session'); // 后续逻辑无需改动 const bot = new Telegraf('你的Bot Token'); bot.use(session());
注意:如果搭配Scenes场景使用,session中间件必须在场景相关中间件之前注册,否则会话状态无法正常存储。
方案2:降级到兼容旧语法的版本
如果不想改动现有代码逻辑,直接将Telegraf固定到最后一个支持内置session的版本即可:
npm install telegraf@4.11.2
降级完成后,你原本写的两种导入方式都可以正常运行,不会再出现路径导出错误、编辑器标红划掉的问题。
避坑提示
Telegraf自4.12版本起做了核心精简,除session外,不少原内置的中间件(如stage、i18n等)都被拆分为@telegraf/*命名空间下的独立包,主包仅保留核心能力,网上发布时间较早的教程里的导入写法,在新版本里大概率无法直接运行。
内容的提问来源于stack exchange,提问作者sb_thedev
相关产品推荐
相关产品推荐

