Jest配置中的transformIgnorePatterns的真正含义是什么?

6

在 Jest 中,我们可以配置 transformIgnorePatterns 来忽略需要进行转译的文件,默认情况下会忽略 "/node_modules/"。然而,如果一个依赖在发布时没有被翻译,比如说 /node_modules/atest,根据官方网站上的说明,应该将其配置到 transformIgnorePatterns 中,这似乎与此配置的“忽略”含义相反。

我想知道通过下面的配置文件,哪些文件被翻译了,哪些文件被忽略了不会被翻译。

module.exports = {
    // ...
    transformIgnorePatterns: ['/node_modules/atest']
    // ...
}

可能的答案1:除了atest之外,node_modules中的依赖项都被转译。
可能的答案2:只有node_modules中的atest被转译,其余依赖项没有被转译。
1个回答

6

根据文档,transformIgnorePatterns选项的默认值为:["/node_modules/", "\\.pnp\\.[^\\\/]+$"]

这意味着:

如果文件路径与任何一个模式匹配,它将不会被转换。

因此,默认情况下,node_modules目录中的包不会被转换。

现在,假设您有一个名为atest的非预编译包,需要使用babel对其进行转换,并且不希望转换node_modules内的其他包。因此,配置应为:

{
  "transformIgnorePatterns": ["/node_modules/(?!(atest)/)"]
}

测试路径:

/node_modules/atest/index.js
/node_modules/react/index.js
/node_modules/lodash/index.js
/node_modules/dayjs/index.js
/node_modules/atest将被排除在transformIgnorePatterns配置之外,这意味着它将被转换。
查看正则表达式测试

2
我同意OP的观点,这确实令人困惑。但根据你的回答,该属性会忽略node_modules中的所有包。在实际使用中,我们希望指定要包含的文件。关键在于(?!...)是一个负向前瞻。所以基本上...我们希望忽略以下文件:"node_modules中的所有文件,除了atest文件"。 - undefined
我同意OP的观点,这确实令人困惑。但根据你的回答,该属性忽略了node_modules中的所有包。在实际使用中,我们希望指定要包含的文件。关键在于(?!...)是一个负向前瞻。因此,基本上...我们希望忽略以下文件:"除了atest之外的所有node_modules中的文件"。 - wongz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接