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

部署JEST测试THREE.js OrbitControls时出现ENOENT错误

解决Jest测试中Three.js OrbitControls导入报错问题

问题根源

Jest的模块解析机制和Webpack/Vite这类构建工具存在差异——即便项目编译运行正常,Jest可能无法正确识别Three.js examples/jsm目录下的ES模块路径,导致抛出文件找不到的错误。

可行解决方案

1. 配置Jest路径映射

在项目的jest.config.js(或jest.config.ts)中添加moduleNameMapper,明确指定OrbitControls的文件路径(需带上.js后缀,Jest解析ES模块时需要明确后缀):

module.exports = {
  // 保留原有配置
  moduleNameMapper: {
    '^three/examples/jsm/controls/OrbitControls$': '<rootDir>/node_modules/three/examples/jsm/controls/OrbitControls.js'
  }
};

2. 开启Jest对ES模块的支持

如果项目使用ES模块而非CommonJS,需在Jest配置中添加ES模块支持,并配合Babel处理:

module.exports = {
  // 其他配置
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest'
  },
  extensionsToTreatAsEsm: ['.js', '.jsx', '.ts', '.tsx']
};

同时确保babel.config.js中配置了@babel/preset-env等支持ES模块的预设。

3. 重新安装依赖修复文件缺失

偶尔依赖安装会出现文件不完整的情况,可尝试清理后重新安装:

rm -rf node_modules package-lock.json
npm install

或者单独重新安装Three.js:

npm install three --save

4. 用路径别名简化导入(可选)

在项目的tsconfig.json/jsconfig.json中配置路径别名,同时同步到Jest的moduleNameMapper:

{
  "compilerOptions": {
    "paths": {
      "@three/OrbitControls": ["node_modules/three/examples/jsm/controls/OrbitControls.js"]
    }
  }
}

Jest配置中对应添加:

moduleNameMapper: {
  '^@three/OrbitControls$': '<rootDir>/node_modules/three/examples/jsm/controls/OrbitControls.js'
}

之后导入语句可改为import { OrbitControls } from '@three/OrbitControls';,降低路径解析出错概率。


内容的提问来源于stack exchange,提问作者David M. Ospina Eslava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:24