我正在帮助一个使用WebdriverIO的测试项目。我们在TS serrtings上遇到了巨大的困难,因为TS转译器似乎可以正确解析TS模块,但在运行时解析失败。
例如,如果我有一个模块:
// config/config.ts
export const config = {};
然后是一个文件:
// someTest.ts
import { config } from './config/config`;
然后TS将正确显示config
的类型。然而,当运行套件时,我会得到这样的消息:
[0-2] 2023-04-18T09:07:54.651Z ERROR @wdio/runner: Error: Cannot find module '/Users/ronnyefronny/projects/wdio-demo/config/config' imported from /Users/ronnyefronny/projects/wdio-demo/test/step-definitions/VoiceflowStepDefs.ts
我的tsconfig.json
是:
{
"compilerOptions": {
"moduleResolution": "node",
"declaration": true,
"module": "ESNext",
"baseUrl": "./",
"types": [
"node",
"@wdio/globals/types",
"expect-webdriverio",
"@wdio/cucumber-framework",
],
"target": "ESNext",
"esModuleInterop": true,
"resolveJsonModule": true,
}
}
其余的WDIO配置是按照他们的文档推荐的,仍然什么都没有。
让我困惑的是,在their own example boilerplate repo中,WDIO将TS模块导入为JS,这让我困惑不已。我已经在后端和前端项目中使用TS几年了,从来不需要导入TS模块作为其编译的JS对应物。
也就是说,而不是
import { config } from './config/config';
就可以了
import { config } from './config/config.js';
我很想知道为什么会发生这种情况,更具体地说,为什么在这种情况下我不能使用常规的TS导入。有什么区别吗?
1条答案
按热度按时间amrnrhlw1#
我通过在
tsconfig.json
中添加allowImportingTsExtensions
解决了这个问题。tsconfig.json
现在它是如此漂亮,VS代码给了一个提示,但我没有完全阅读它。
p.p.s
顺便说一句,VS代码建议添加
allowImportingTsExtensions
只有当你设置你的VS代码编译器版本为v5.0.4最初我选择了v4.8.4它没有建议我。这是因为TS v5.0中引入了此选项