这个转译问题是否正确地针对 babel-jest 提出?

Is this transpilation issue correctly filed against babel-jest?

我针对 jest 项目提出了一个问题 https://github.com/facebook/jest/issues/11504,我认为该项目负责维护 babel-jest。添加看似无害且无错误的代码后,转译完全失败。

但是,Typescript Next 项目的转译有很多层,所以我不确定这是不是提交问题的正确位置,是否与可能的失败源相匹配。

这个问题是否与 babel-jest 项目匹配,或者我应该将它提交到其他地方吗?

BUG

我在一个复杂的 Next Typescript 项目中发现,在一个文件中添加少量行就足以破坏 babel-jest 转译并在另一个完全不同的文件中造成 运行时间错误。

在提交 04c4c7b 中,在签出干净的项目并 运行ning yarn 之后,我能够通过 yarn run test 的测试。传递的源代码树位于 https://github.com/cefn/jest-transpile-failure-repro/tree/04c4c7b7013e8b88c25d3ab2a7d4a33ccd3fb191

但是,在添加了您可以看到的几行代码后 in commit 25703fc,babel-jest 转译器似乎有效地破坏了测试 运行,并且一个完全不相关的文件开始变得 运行测试期间的时间错误,这毫无意义,例如...

ReferenceError: Cannot access 'SCORERS' before initialization

      47 |   sortedEntries.sort((a: Immutable<Entry>, b: Immutable<Entry>) => {
      48 |     for (const scoreName of scorePriority) {
    > 49 |       const scorer = SCORERS[scoreName]
         |                      ^
      50 |       const diff = scorer(b) - scorer(a)
      51 |       if (diff !== 0) {
      52 |         return diff

      at sort (src/util.tsx:49:22)
          at Array.sort (<anonymous>)
      at sortEntries (src/util.tsx:47:17)
      at Object.<anonymous> (src/logic.ts:10:20)
      at Object.<anonymous> (src/components/controls/Buttons.tsx:6:1)
      at Object.<anonymous> (src/components/Controls.tsx:8:1)
      at Object.<anonymous> (src/components/index.ts:1:1)
      at Object.<anonymous> (src/util.tsx:6:1)
      at Object.<anonymous> (test/util.test.ts:3:1)

请注意,提交 25703fc 使用 tsc 和 运行s 编译得非常好并且看起来功能正常。

这个错误没有意义,因为 SCORERS 是在函数定义上方的模块闭包中定义的常量。

它也是一个与提交 25703fc 中更改的文件完全无关的文件,这表明提交 25703fc 中的语言结构的某些内容已将转译器推入错误状态。

最后,它是一个已被使用的文件中的 运行 时间错误,并且 运行 在生产案例中很好,所以我不相信它实际上有任何打字稿错误。

我应该用 babel 还是 nextjs 来解决这个问题,或者它是正确的 babel-jest 问题,还是其他一些项目?

任何人都知道解决方法,例如使用完全不同的 babel 系统来转换 Typescript nextjs 代码,以防我可以证明 babel-jest 在这里有问题?

通过 'proof' 你可以看到编译的代码和 运行ning 在生产环境中,尽管在 https://cefn.com/cv

处出现了 babel-jest 编译器错误

下图显示了将转译器推入错误的实际更改行,作为提交 github 差异的屏幕截图...

您通过添加新的

在代码中引入了依赖循环
import { INITIAL_APPSTATE } from '../../logic'

Button.tsx 中导入。您可以在您发布的错误的堆栈跟踪中看到它

  at sort (src/util.tsx:49:22)
  at Array.sort (<anonymous>)
  at sortEntries (src/util.tsx:47:17)
  at Object.<anonymous> (src/logic.ts:10:20)
  at Object.<anonymous> (src/components/controls/Buttons.tsx:6:1)
  at Object.<anonymous> (src/components/Controls.tsx:8:1)
  at Object.<anonymous> (src/components/index.ts:1:1)
  at Object.<anonymous> (src/util.tsx:6:1)
  at Object.<anonymous> (test/util.test.ts:3:1)

你的测试加载 util.tsx 导入 components/index.ts 等等直到它加载 Buttons.tsx 由于你的补丁现在导入 logic.ts 然后再次导入 util.tsx,但由于您的代码 通过导入 util.tsx 开始 ,它尚未完成执行,因为它仍在加载其所有依赖项。当 Button.tsx 尝试导入 logic.ts 时,它会调用 sortEntries,但该函数依赖于 util.tsx 已正确执行,但它还没有时间这样做。

您需要重新组织代码以在依赖项中不存在此循环。一个名为 util 的文件会导入一个组件,这似乎非常令人惊讶,因此将 downloadPdf 移动到它自己的 downloadPdf.ts 中,这样 util.ts 就不再需要做 import { Resume } from './components'将是理想的解决方案。