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

Node.js开发npm包时出现Unexpected token 'export'报错

错误原因

SyntaxError: Unexpected token 'export' 由模块规范不匹配导致:

  • Node.js 默认将 .js 后缀文件按 CommonJS 规范解析,无法直接识别 ESM 规范的 export 关键字
  • 组件文件使用 CommonJS 规范的 module.exports 导出,但入口文件用了 ESM 规范的导出语法,两种写法混用
  • 业务项目中使用 CommonJS 规范的 require() 引入包,和入口的 ESM 导出语法不兼容。
解决方案

两种方案二选一即可,第一种改造成本最低,和你现有代码逻辑完全适配。

方案1:统一使用CommonJS规范(推荐)

直接把入口index.js的ESM导出语法替换为CommonJS写法,和组件文件的导出规范、业务项目的引入方式保持一致,不需要修改任何package.json配置:

const { MailProcess } = require("./mail/MailProcess");
// 后续其他组件按相同方式引入即可
// const { OtherComponent } = require("./other/OtherComponent");

module.exports = {
  MailProcess,
  // OtherComponent
};

修改完成后重新发布包,业务项目中原有let {MailProcess} = require('@myusername/mypackagename');的引入代码可以直接正常运行。

方案2:统一使用ES Module规范

如果需要全程使用ESM的import/export语法,需要做三处调整:

  1. 在package.json中添加"type": "module"字段,声明包内所有.js文件按ESM规范解析:
{
  "name": "packagename",
  "version": "1.0.3",
  "description": "Private package",
  "main": "index.js",
  "type": "module",
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/...."
  },
  // 其余配置保持不变
}
  1. 将所有组件文件的CommonJS导出改为ESM写法,比如MailProcess.js中原有的导出代码替换为:
export class MailProcess {
  constructor(name, code) {
    this.name = name;
    this.code = code;
  }
}
  1. ESM规范不支持require()语法,业务项目的引入代码需要同步修改为:
import { MailProcess } from '@myusername/mypackagename';
注意事项
  • 同一个npm包内尽量统一使用一种模块规范,没有特殊兼容需求不要混写CommonJS和ESM语法,否则极易出现解析错误
  • 若使用的Node.js版本低于14.x,ESM语法存在较多兼容问题,优先选择CommonJS方案
  • 修改包代码后需要重新发布版本,业务项目更新到最新版本的包后再测试运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:54:29