Typescript 这个问题是否正确地针对巴贝尔玩笑提出?
我对jest项目提出了一个问题,我认为它负责维护babel jest。在添加明显无害且无错误的代码后,Transpilation完全失败 然而,在下一个项目中,Typescript的透明有很多层,因此我不确定这是否是提交问题的正确位置,是否与失败的可能来源相匹配 这个问题似乎与babel jest项目相匹配,还是我应该将它归档到其他地方 臭虫 我在一个复杂的Next Typescript项目中发现,在一个文件中添加几行就足以破坏babel jest转换,并在一个完全不同的文件中创建运行时错误 在commit 04c4c7b中,在检查干净项目和运行纱线后,我能够通过纱线运行测试。传递的源树位于 然而,在添加了您可以看到的少量行之后,babel jest transpiler似乎有效地中断了测试,使测试无法运行,并且一个完全不相关的文件在测试期间开始出现运行时错误,这与Typescript 这个问题是否正确地针对巴贝尔玩笑提出?,typescript,next.js,babeljs,babel-jest,transpiler,Typescript,Next.js,Babeljs,Babel Jest,Transpiler,我对jest项目提出了一个问题,我认为它负责维护babel jest。在添加明显无害且无错误的代码后,Transpilation完全失败 然而,在下一个项目中,Typescript的透明有很多层,因此我不确定这是否是提交问题的正确位置,是否与失败的可能来源相匹配 这个问题似乎与babel jest项目相匹配,还是我应该将它归档到其他地方 臭虫 我在一个复杂的Next Typescript项目中发现,在一个文件中添加几行就足以破坏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是在函数定义上方的模块闭包中定义的常量
它也是一个与commit 25703fc中更改的文件完全无关的文件,这表明commit 25703fc中的语言构造将transpiler推到了错误状态
最后,它是一个文件中的运行时错误,该文件已经被使用,并且在生产环境中运行良好,因此我不认为它实际上存在任何类型脚本错误
我应该用babel或者nextjs来解决这个问题,或者这是一个babel的玩笑问题,还是其他项目
有没有人知道一个变通方法,比如使用一个完全不同的巴贝尔系统来传输Typescript nextjs代码,以防我能证明巴贝尔玩笑在这里是错的
通过“证明”,您可以看到在生产环境中编译并运行的代码,尽管在
下图显示了实际更改的行,这些行将transpiler推到了错误的位置,这是来自提交的github diff的屏幕截图
通过添加新的
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,它导入组件/index.ts等等,直到加载Buttons.tsx,由于您的补丁,Buttons.tsx现在导入logic.ts,logic.ts然后再次导入util.tsx,但是由于您的代码是从导入util.tsx开始的,它还没有完成执行,因为它仍然在加载所有依赖项。当Button.tsx尝试导入logic.ts时,它调用sortEntries,但该函数依赖于util.tsx是否正确执行,而且它还没有时间这样做
您需要重新组织代码,以避免依赖项中出现此循环。一个名为util的文件会导入一个组件,因此将downloadPdf移动到它自己的downloadPdf.ts中,这样util.ts就不再需要从“/components”导入{Resume}了,这似乎是一个非常令人惊讶的解决方案。这非常有用,谢谢!我一直在使用madge来尝试消除循环,因为运行它会发现没有循环npx madge-circular test/util.test.ts,但我也应该仔细查看导入序列。更新我发现,如果顶级tsconfig被指定为npx madge-circular-ts config这样的参数,madge会检测到循环tsconfig.json-扩展名ts,tsx./。不幸的是,npx madge-circular-ts config tsconfig.jest.json-extensions ts,tsx./指向或省略了-ts config参数,因为我之前运行它时没有发现这种特殊的循环性。