这个转译问题是否正确地针对 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'
将是理想的解决方案。
我针对 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'
将是理想的解决方案。