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

如何在旧版JavaScript项目中使用mocha和chai避免找不到模块错误

问题修复方案
    1. 修正导入路径拼写和后缀问题
      你要测试的文件路径是/public/scripts/world.js,测试用例里的导入语句存在两处错误:目录名拼写少了末尾的s(写了script实际是scripts),且ES模块(你在package.json中设置了"type": "module")导入本地文件必须补全后缀名。
      修正后的导入语句为:
import { myTestFunction } from "../../public/scripts/world.js";
    1. 修复模块导出混用问题
      你的world.js同时使用了ES模块的export语法和CommonJS的module.exports语法,会导致导出异常,统一调整为ES模块规范即可:
      删掉末尾的module.exports = { myTestFunction };,将函数定义改为ES导出写法:
export function myTestFunction() {
    return {};
}

原有代码中的export var相关写法不需要修改。

    1. 新增Babel配置适配ES5遗留代码
      在项目根目录新增.babelrc配置文件,内容如下:
{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}
    1. 调整测试命令和依赖适配ES模块
      你当前使用的@babel/register默认不支持ESM规范,先安装对应loader依赖:
npm install @babel/esm-loader --save-dev

再修改package.json中的test命令:

"scripts": {
  "test": "mocha \"./tests/js/*.test.js\" --recursive --experimental-specifier-resolution=node --loader @babel/esm-loader"
}
    1. 处理绝对路径导入解析问题
      你的world.js中存在/script/bap/building.js这类以/开头的绝对路径导入,node环境默认会将其识别为系统根路径,需要安装路径映射插件处理:
      先安装依赖:
npm install babel-plugin-module-resolver --save-dev

再修改.babelrc添加插件配置:

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current"
      }
    }]
  ],
  "plugins": [
    ["module-resolver", {
      "root": ["./public"],
      "alias": {
        "/script": "./public/script",
        "/assets": "./public/assets"
      }
    }]
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:03