ng test报TypeError: compilation参数需为Compilation实例,ng build正常
Angular库单元测试报错
TypeError: The 'compilation' argument must be an instance of Compilation排查方向 执行
ng test libraryprojectname运行单元测试时触发如下错误,但ng build可正常执行,项目为包含Angular库的工作区:TypeError: The 'compilation' argument must be an instance of Compilation at Function.getCompilationHooks (C:\dev\MDM\node_modules\webpack\lib\javascript\JavascriptModulesPlugin.js:141:10) at SourceMapDevToolModuleOptionsPlugin.apply (C:\dev\MDM\node_modules\webpack\lib\SourceMapDevToolModuleOptionsPlugin.js:50:27) at C:\dev\MDM\node_modules\webpack\lib\SourceMapDevToolPlugin.js:163:53 at Hook.eval [as call] (eval at create (C:\dev\MDM\projects\libraryprojectname\node_modules\tapable\lib\HookCodeFactory.js:19:10), <anonymous>:108:1) at Hook.CALL_DELEGATE [as _call] (C:\dev\MDM\projects\libraryprojectname\node_modules\tapable\lib\Hook.js:14:14) at Compiler.newCompilation (C:\dev\MDM\projects\libraryprojectname\node_modules\webpack\lib\Compiler.js:1122:26) at C:\dev\MDM\projects\libraryprojectname\node_modules\webpack\lib\Compiler.js:1166:29 at Hook.eval [as callAsync] (eval at create (C:\dev\MDM\projects\libraryprojectname\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1) at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\dev\MDM\projects\libraryprojectname\node_modules\tapable\lib\Hook.js:18:14) at Compiler.compile (C:\dev\MDM\projects\libraryprojectname\node_modules\webpack\lib\Compiler.js:1161:28)
排查方向:
- 检查webpack版本冲突:工作区根目录和库子目录的
node_modules可能存在多版本webpack,导致实例不兼容。删除整个工作区的node_modules、package-lock.json/yarn.lock,重新执行npm install或yarn install统一版本。 - 验证测试阶段的webpack插件配置:查看库项目的
karma.conf.js或angular.json中测试环节的webpack配置,是否手动引入了与当前webpack版本不兼容的插件(比如自定义SourceMap插件),尝试注释后重试测试。 - 确认Angular版本匹配:Angular CLI版本与库项目的
@angular/core、@angular/compiler等核心依赖必须严格对应,运行ng version核对工作区和库的版本,不一致则升级/降级到匹配版本。 - 排查测试环境依赖污染:检查是否有第三方测试工具(如jest、cypress)的残留配置干扰webpack编译,暂时禁用非官方测试插件后重新执行测试。
- 检查测试用tsconfig配置:核对库项目的
tsconfig.spec.json里的target、module等编译选项是否与build用的tsconfig.lib.json一致,避免编译出不兼容代码导致webpack处理失败。
内容的提问来源于stack exchange,提问作者Mr Smith
相关产品推荐
相关产品推荐

