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

Angular 20升级后Jest处理@angular/common/locales模块的转译错误解决方案咨询

Angular 20升级后Jest处理@angular/common/locales模块的转译错误解决方案咨询

各位大佬,最近升级到Angular 20后,跑Jest测试时碰到了一个本地化模块的转译问题,折腾好久没搞定,来请教下大家!

问题情况

先梳理下背景:

  • Angular 19中,@angular/common/locales下的本地化文件后缀都是.mjs
  • 升级到Angular 20后,这些文件的后缀直接变成了.js
  • Jest默认配置会忽略对node_modules目录下.js文件的转译处理

我在项目里是这么引入法语本地化的:

import localeFR from '@angular/common/locales/fr';
registerLocaleData(localeFR);

结果跑测试时直接抛出语法错误:

C:\xxx\node_modules@angular\common\locales\fr.js:18
export default ["fr", [["AM", "PM"], u, u], u, [["D", "L", "M", "M", "J", "V", "S"], ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], ["di", "lu", "ma", "me", "je", "ve", "sa"]], u, [["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"]], u, [["av. J.-C.", "ap. J.-C."], u, ["avant Jésus-Christ", "après Jésus-Christ"]], 1, [6, 0], ["dd/MM/y", "d MMM y", "d MMMM y", "EEEE d MMMM y"], ["HH:mm", "HH:mm:ss", "HH:mm:ss z", "HH:mm:ss zzzz"], ["{1} {0}", "{1}, {0}", "{1} 'à' {0}", u], [",", " ", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0 %", "#,##0.00 ¤", "#E0"], "EUR", "€", "euro", { "ARS": ["$AR", "$"], "AUD": ["$AU", "$"], "BEF": ["FB"], "BMD": ["$BM", "$"], "BND": ["$BN", "$"], "BYN": [u, "р."], "BZD": ["$BZ", "$"], "CAD": ["$CA", "$"], "CLP": ["$CL", "$"], "CNY": [u, "¥"], "COP": ["$CO", "$"], "CYP": ["£CY"], "EGP": [u, "£E"], "FJD": ["$FJ", "$"], "FKP": ["£FK", "£"], "FRF": ["F"], "GBP": ["£GB", "£"], "GIP": ["£GI", "£"], "HKD": [u, "$"], "IEP": ["£IE"], "ILP": ["£IL"], "ITL": ["₤IT"], "JPY": [u, "¥"], "KMF": [u, "FC"], "LBP": ["£LB", "£L"], "MTP": ["£MT"], "MXN": ["$MX", "$"], "NAD": ["$NA", "$"], "NIO": [u, "$C"], "NZD": ["$NZ", "$"], "PHP": [u, "₱"], "RHD": ["$RH"], "RON": [u, "L"], "RWF": [u, "FR"], "SBD": ["$SB", "$"], "SGD": ["$SG", "$"], "SRD": ["$SR", "$"], "TOP": [u, "$T"], "TTD": ["$TT", "$"], "TWD": [u, "NT$"], "USD": ["$US", "$"], "UYU": ["$UY", "$"], "WST": ["$WS"], "XCD": [u, "$"], "XPF": ["FCFP"], "ZMW": [u, "Kw"] }, "ltr", plural];
^^^^^^ SyntaxError: Unexpected token 'export'

我的理解和尝试

我明白这是因为Angular的依赖都是ES模块,就算后缀是.js也是ES语法,但Jest默认只识别CommonJS格式,所以必须转译这些文件才能正常运行。

我的需求是:除了@angular/common/locales下的.js文件,其他所有.js文件都保持Jest默认的忽略转译规则。

我自己试了下面的transformIgnorePatterns配置,但完全没效果:

"transformIgnorePatterns": [
  "^.+\\.js$",
  "node_modules/(?!@angular\\/common\\/locales)"
]

想请教的问题

有没有大佬知道正确的Jest配置方式,能实现我想要的转译规则呀?麻烦指点一下,谢谢啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:10:02