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

如何解决这个转译问题是否针对 babel-jest 正确提交?

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

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

这个问题是否与 babel-jest 项目匹配,还是我应该将其归档到其他地方?

BUG

我在一个复杂的 Next Typescript 项目中发现,在一个文件添加几行代码足以破坏 babel-jest 转译并在一个完全不同的文件中创建运行时错误

在提交 04c4c7b 中,在检查干净项目并运行 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)

请注意,commit 25703fc 使用 tsc 进行编译并且运行良好并且看起来很正常。

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

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

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

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

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

通过“证明”,您可以看到代码在生产环境中编译并运行,尽管 https://cefn.com/cv 处存在 babel-jest 编译器错误

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

enter image description here

解决方法

您通过添加新的代码在代码中引入了依赖循环

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'将是理想的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?