Jest.config.js无法转换.ejs文件,请求配置故障排查帮助
解决Jest配置EJS转换的错误
问题分析
你的配置里有三个核心问题:
- 正则表达式缺失小数点:
^.+\\ejs$无法匹配.ejs后缀的文件,应该改为^.+\\.ejs$ moduleNameMapper多余配置:EJS文件不需要别名映射,该规则会和transform的转换逻辑冲突fileTransformer.js直接复用webpack loader不兼容:ejs-loader是为webpack设计的,和Jest转换器的参数格式不匹配
修正后的jest.config.js
"use strict" /** @type {import('jest').Config} */ const config = { verbose: true, moduleFileExtensions: ["js", "jsx", "ejs", "ejx"], transform: { "^.+\\.js$": "babel-jest", "^.+\\.ejs$": "./fileTransformer.js" } }; module.exports = config
方案一:用原生EJS编写转换器(推荐)
直接使用EJS核心库编译文件,避免webpack loader的适配问题:
const ejs = require('ejs'); module.exports = { process(content) { // 编译EJS为可执行函数,导出为CommonJS模块 const compiledTemplate = ejs.compile(content); return `module.exports = ${compiledTemplate.toString()};`; } };
执行前确保安装EJS依赖:
npm install ejs --save-dev
方案二:适配ejs-loader作为转换器
如果你坚持用ejs-loader,需要模拟webpack的loader上下文参数:
const loader = require("ejs-loader"); const path = require('path'); module.exports = { process(content, filename) { const loaderContext = { resourcePath: filename, query: {}, // 可添加ejs-loader配置,比如{ interpolate: '\\{\\{(.+?)\\}\\}' } callback: (err, result) => { if (err) throw err; return result; } }; return loader.call(loaderContext, content); } };
内容的提问来源于stack exchange,提问作者bitmage
相关产品推荐
相关产品推荐

