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

开发npm包时ES模块作用域报ReferenceError: module is not defined错误

问题根因

你在package.json中配置了"type": "module",这会让Node.js把项目下所有.js后缀的文件默认按ES模块处理,而你项目里的某份JS文件(大概率是Lint配置、提交钩子脚本、打包配置这类工具类配置文件)使用了CommonJS语法的module对象(比如module.exports),就会触发该报错。你的入口index.ts的ESM导出写法本身是符合规范的,不需要修改。

解决方案
  • 首先排查项目根目录下的配置类.js文件,比如.eslintrc.js、.prettierrc.js、lint-staged.config.js、husky钩子对应的JS脚本、vite/webpack等打包工具的配置JS文件,检查是否有使用module.exports、require这类CommonJS语法:
    • 如果这类配置文件确实需要用CommonJS语法,直接把文件后缀从.js改成.cjs即可,Node.js会自动识别为CommonJS模块,和你项目本身的ESM代码互不影响
    • 如果想保持.js后缀,就把配置文件里的CommonJS语法改成ESM语法:把module.exports = xxx改成export default xxx,把const xx = require('xx')改成import xx from 'xx'
  • 如果是业务代码/包源码里用到了module相关语法,全部替换成ESM的export、import语法即可
  • 可以补充校验package.json的入口配置是否符合ESM规范,避免后续用户导入时报错:
{
  "type": "module",
  "main": "./dist/index.js",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "import": "./dist/index.js",
      "types": "./dist/index.d.ts"
    }
  }
}

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04