Mocha 'cannot find module'错误:npm脚本与直接执行的差异问题
解决npm test执行mocha时的"cannot find module"问题
我之前在Windows环境下用npm脚本跑mocha测试时也碰到过一模一样的问题,结合你的环境配置和报错情况,帮你梳理下原因和可行的解决办法:
问题根源
直接在命令行敲mocha ./test/unit/* --recursive能正常运行,是因为你的终端(比如Git Bash、PowerShell这类)会自动把通配符*展开成./test/unit目录下的所有子目录/文件;但npm脚本在Windows默认用cmd.exe执行,它不会自动解析通配符,导致mocha去查找字面意义上的./test/unit/*这个路径,自然找不到对应的模块文件。
可行解决方案
方案1:移除通配符,依赖--recursive递归查找
既然你已经加了--recursive参数,完全不需要用*来指定子目录——mocha会自动遍历./test/unit下的所有层级目录并执行测试文件。修改package.json的scripts字段即可:
"scripts": { "test": "mocha ./test/unit --recursive" }
这个方案跨平台兼容性最好,也是最稳妥的,优先推荐尝试。
方案2:让npm用支持通配符的shell执行脚本
如果你坚持要保留通配符写法,可以让npm调用bash来执行命令(前提是你的系统已经安装了bash,比如Git自带的Git Bash)。修改scripts如下:
"scripts": { "test": "bash -c 'mocha ./test/unit/* --recursive'" }
这样bash会帮你自动展开通配符,效果和你直接在终端运行命令完全一致。
方案3:确认工作目录一致性
偶尔也会因为运行npm test的目录和package.json所在目录不一致导致路径解析错误,你可以先验证下:
"scripts": { "test": "echo %cd% && mocha ./test/unit/* --recursive" }
如果打印的路径不是项目根目录C:_dev\app\server,切换到正确目录再执行npm test即可。
内容的提问来源于stack exchange,提问作者The E
相关产品推荐
相关产品推荐

