Node.js应用导入@microsoft/mgt库出现Unexpected token 'export'报错如何解决
错误原因
你遇到的Unexpected token 'export'报错,是因为Node.js默认使用CommonJS模块规范加载代码,而@microsoft/mgt-element包仅发布了ES Module(ESM)格式的产物,同时你配置的Babel默认不会转译node_modules目录下的第三方依赖,导致ESM的export语法没有被转换为CommonJS兼容语法,直接被Node执行就抛出了语法错误。
解决方案
你可以选择以下任意一种方案修复问题:
方案1:调整Babel配置,转译MGT相关依赖
修改你的Babel配置文件(babel.config.js/babel.config.json/.babelrc),新增配置排除对@microsoft系列包的跳过转译规则,示例配置如下:
// babel.config.js 示例 module.exports = { presets: [ ['@babel/preset-env', { targets: { node: 'current' } }] ], // 除了@microsoft下的包,其余node_modules依赖不转译 exclude: /node_modules\/(?!@microsoft)/ }
修改后重启服务即可生效。
方案2:开启Node.js原生ESM支持
如果你不需要兼容旧版CommonJS语法,可以直接开启Node.js的ESM原生支持:
- 打开项目根目录的
package.json文件,新增顶级配置项"type": "module" - 替换项目内所有
require/module.exports语法为import/export语法,相对路径引入需补全文件后缀(例如./utils改为./utils.js)
该方案不需要修改Babel配置,Node原生就能识别ESM的export语法。
方案3:使用动态import加载MGT包
如果不想修改全局配置,可以将原有导出语句替换为兼容CommonJS的动态导入写法:
// 替换原有的 export * from '@microsoft/mgt-element' import('@microsoft/mgt-element').then(mgtModule => { module.exports = mgtModule })
验证排查项
- 确认你安装的
@babel/preset-env为最新稳定版,避免版本兼容导致转译失效 - 如果你使用
@babel/register启动项目,需要同步在注册配置中添加ignore: [/node_modules\/(?!@microsoft)/]参数
内容的提问来源于stack exchange,提问作者Diptanu Saha
相关产品推荐
相关产品推荐

