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

Node.js v18.3.0下VS Code类继承场景Export/Import不生效问题

问题原因

你写的代码有两个核心错误,和Node.js的模块加载规则直接相关:

  • 导入路径不符合Node.js ESM/CommonJS规范:你写的import {Animal} from 'animal.js'没有加相对路径前缀./,Node.js遇到不带路径前缀的导入名,会默认去node_modules目录下查找名为animal.js的第三方包,根本不会加载你本地写的animal.js文件。
  • 模块规范识别冲突:Node.js v18默认对.js后缀文件使用CommonJS规范解析,直接写export/import这类ESM语法会直接抛语法错误;你之前尝试的module.export写法本身有笔误,CommonJS正确导出属性是module.exports(末尾带s),漏写s会导致导出内容为空;修改后缀为.mjs后没生效,核心原因还是导入路径没加./前缀,和后缀无关。
修正方案

二选一即可,不要混用两种模块规范:

方案1:使用ESM规范(匹配你当前写的export/import语法)

  1. 配置Node识别ESM:在项目根目录的package.json中添加"type": "module"字段,之后所有.js后缀文件都会按ESM规范解析,不需要修改后缀为.mjs。如果不想加package.json配置,把三个文件的后缀统一改成.mjs也可以。
  2. 修正所有本地文件导入的路径,必须加相对路径前缀./,且ESM规范下不能省略文件后缀。

修正后的核心代码如下:
animal.js:

class Animal {
  // 原有类逻辑保持不变
}

export { Animal }

dog.js:

// 重点:路径前加./,不要省略后缀
import { Animal } from './animal.js';

class Dog extends Animal {
  // 原有继承逻辑保持不变
}

// 供test.js导入使用需要主动导出
export { Dog }

test.js中导入Dog时同理,写为import { Dog } from './dog.js'即可正常运行。

方案2:使用CommonJS规范(Node.js默认规范,无需额外配置package.json)

所有文件保持.js后缀即可,替换导入导出语法为CommonJS写法,同样注意本地路径加./前缀。
animal.js:

class Animal {
  // 原有类逻辑保持不变
}

// 注意是exports带末尾s,不要漏写
module.exports = { Animal }

dog.js:

const { Animal } = require('./animal.js');

class Dog extends Animal {
  // 原有继承逻辑保持不变
}

module.exports = { Dog }

test.js中通过const { Dog } = require('./dog.js')导入即可。

常见避坑提醒
  • 同一个文件内不要混用ESM和CommonJS语法,比如不要同时出现export和require/module.exports,会直接触发运行错误。
  • 导入本地自己写的文件时,同目录文件必须加./前缀,上级目录文件加../前缀,不带路径前缀的导入名Node只会当做第三方包去node_modules下查找。
  • CommonJS规范下导出属性是module.exports,漏写末尾的s写成module.export属于无效写法,不会导出任何内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:15:38