导入TS模块时Angular单元测试失败,无法找到@ctrl/ngx-emoji-mart
解决Jest无法识别@ctrl/ngx-emoji-mart模块的问题
针对Angular单元测试中Jest报错Cannot find module '@ctrl/ngx-emoji-mart'的问题,可通过以下两种方案解决:
方案一:调整Jest配置,直接编译该包的TS/MJS文件
由于该包仅提供TS和MJS文件,且Jest默认不编译node_modules内的模块,需修改配置让Jest处理该包:
修改jest.config.js,允许转换@ctrl/ngx-emoji-mart
添加transformIgnorePatterns,排除该包以让Jest对其进行转换:module.exports = { // 其他配置... transformIgnorePatterns: [ 'node_modules/(?!@ctrl/ngx-emoji-mart)' ], };配置TS和MJS的转换器
用ts-jest处理TS文件,babel-jest处理MJS文件,更新transform配置:module.exports = { // 其他配置... transform: { '^.+\\.(ts|tsx)$': 'ts-jest', '^.+\\.mjs$': 'babel-jest' }, moduleFileExtensions: ['ts', 'js', 'mjs', 'json'], };配置Babel支持ES模块转CommonJS
在项目根目录创建或修改babel.config.json,添加预设:{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }] ] }确保已安装依赖:
npm install @babel/preset-env babel-jest --save-dev
方案二:手动编译@ctrl/ngx-emoji-mart为JS并补全main字段
如果配置Jest转换无效,可手动编译该包并修正其package.json:
进入包目录并安装编译依赖
cd node_modules/@ctrl/ngx-emoji-mart npm install编译TS文件为CommonJS格式
若包内已有build命令,直接运行:npm run build若无build命令,手动创建
tsconfig.json:{ "compilerOptions": { "target": "ES2020", "module": "CommonJS", "outDir": "./dist", "strict": true, "esModuleInterop": true }, "include": ["src/**/*"] }然后执行编译:
npx tsc补全package.json的main字段
修改该包的package.json,添加指向编译后入口文件的main字段:"main": "./dist/index.js"用patch-package保存修改(可选)
为避免下次npm install覆盖修改,使用patch-package生成补丁:# 回到项目根目录 cd ../../ npm install patch-package --save-dev npx patch-package @ctrl/ngx-emoji-mart后续重装依赖时,补丁会自动应用。
内容的提问来源于stack exchange,提问作者AnKing
相关产品推荐
相关产品推荐

