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

Intern 4迁移测试失败:Dojo2 loader加载路径错误求助

解决Intern 4/Dojo2迁移时的loader路径加载失败问题

问题背景

我正从Intern 3/RequireJS迁移至Intern 4/Dojo2,执行测试时,完成能力检查后在加载测试前就失败,报错信息如下:

Listening on localhost:9000 (ws 9001)
Tunnel started …Created remote session chrome 66.0.3359.139 on XP (bc531663-f9f7-4cba-9038-6ab15808e9a0)
Suite chrome 66.0.3359.139 on XP FAILED
Error: Unable to load /..\node_modules\intern/loaders/dojo2.js at HTMLScriptElement.<anonymous> <node_modules\intern\browser\remote.js:667:23264>
TOTAL: tested 1 platforms, 0 passed, 0 failed; suite error occurred

从http://localhost:9000/__intern/browser/remote.html请求该文件时出现404,看起来是dojo2.js的路径错误。若将配置中的“dojo2”替换为“__intern/loaders/dojo2.js”,则会出现/node_modules/@dojo/loader/loader.js的404错误。似乎是路径指向错误,请问该如何修复?

附intern.json配置:

{
  "loader": {
    "script": "dojo2",
    "config": {
      "waitSeconds": 60,
      "packages": [
        { "name": "objects", "location": "objects" },
        { "name": "edits", "location": "./", "main": "edits" },
        { "name": "prepare", "location": "TESTS", "main": "prepare" },
        { "name": "common", "location": "./", "main": "common" },
        { "name": "socket", "location": "http://localhost:2020/socket.io", "main": "socket.io" }
      ]
    }
  },
  "suites": [ "./functional/InitTests.js" ],
  "environments": [ { "browserName": "chrome" } ],
  "tunnelOptions": {
    "drivers": [ "chrome" ],
    "port": 4444,
    "version": "3.4.0",
    "maxConcurrency": 1,
    "runnerClientReporter": { "writeHtml": false }
  },
  "tunnel": "null",
  "leaveRemoteOpen": true,
  "grep": ""
}

解决方案

这个问题本质是Intern 4的loader路径解析逻辑和Intern 3不同,加上Windows系统下路径分隔符(\和/)混合导致的解析错误,你可以按以下步骤修复:

  • 修正loader的script配置
    不要直接写dojo2或者完整的相对路径,改用Intern提供的模块标识符来指定loader。Intern 4中dojo2 loader的正确标识符是intern/loaders/dojo2,修改loader.script的值:

    "loader": {
      "script": "intern/loaders/dojo2",
      // 其他配置保持不变
    }
    

    这样Intern会自己处理路径解析,避免手动写路径带来的分隔符问题。

  • 配置loader的package映射,解决@dojo/loader的404问题
    当使用dojo2 loader时,它需要正确找到@dojo/loader包。你需要在loader的config.packages里添加@dojo/loader的映射:

    "loader": {
      "script": "intern/loaders/dojo2",
      "config": {
        "waitSeconds": 60,
        "packages": [
          // 你的其他package配置
          {
            "name": "@dojo/loader",
            "location": "node_modules/@dojo/loader",
            "main": "loader"
          }
        ]
      }
    }
    

    这个配置告诉dojo2 loader去哪里找它的核心loader文件。

  • 确保路径分隔符统一(Windows环境特别注意)
    把配置里所有路径的分隔符都改成/,比如"./"保持不变,"TESTS"没问题,避免出现..\这种Windows风格的分隔符,Intern在浏览器环境下会用Unix风格的分隔符解析路径。

  • 验证配置生效
    重新启动Intern测试服务,现在请求/__intern/loaders/dojo2.js应该能正确加载,同时@dojo/loader/loader.js也会通过你配置的package路径找到对应的文件。

额外提示

如果还是出现路径问题,可以检查一下你的项目目录结构,确保node_modules/@dojo/loader确实存在,没有安装失败的情况。如果是yarn或者npm的版本问题,尝试重新安装依赖:

rm -rf node_modules package-lock.json
npm install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:36