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

Node.js v18+Babel:模块导入省略扩展名及构建后运行问题

解决方案

问题1:开发环境省略模块导入的.js扩展名

Node.js ES模块规范默认要求导入自定义模块时必须添加扩展名,要省略的话,改用babel-node配合nodemon处理开发环境,Babel会自动补全模块扩展名:

  1. 安装依赖:
npm install --save-dev @babel/node
  1. 修改package.json的dev脚本:
{
  "scripts": {
    "dev": "nodemon --exec babel-node src/app.js"
  }
}

问题2:生产环境转译后CommonJS与ES模块冲突

方案A:让Babel输出ES模块(推荐,适配Node.js 18原生ES模块支持)

修改babel.config.json,给@babel/preset-env添加modules: false,禁止转译ES模块为CommonJS:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": { "node": "18" },
        "debug": true,
        "useBuiltIns": "usage",
        "corejs": 3,
        "modules": false // 新增:保留ES模块格式
      }
    ]
  ]
}

这样转译后的build目录文件仍为ES模块,配合根目录"type": "module"可正常运行,不会出现require is not defined错误。

方案B:给build目录单独配置CommonJS

在build目录下新建package.json,指定该目录下文件为CommonJS:

{
  "type": "commonjs"
}

根目录package.json的"type": "module"仅作用于src目录,build目录的文件会被识别为CommonJS,兼容Babel转译后的代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:13:16