TypeScript模块分辨率不为';我不太喜欢黄瓜

TypeScript模块分辨率不为';我不太喜欢黄瓜,typescript,cucumber,cucumberjs,Typescript,Cucumber,Cucumberjs,我正在使用TypeScript为Cumber js做一个小的概念验证。到目前为止,一切都很好……但在使用tsconfig path时,我找不到正确配置模块分辨率的方法 这是一种结构: 。 ├── 黄瓜 ├── 特征 │   └── 银行账户特征 ├── package.json ├── package-lock.json ├── 步骤定义 │   └── 银行账户 ├── 支持 │   └── 模型 │   └── 银行账户.model.ts ├── tsconfig.json └──

我正在使用TypeScript为Cumber js做一个小的概念验证。到目前为止,一切都很好……但在使用
tsconfig path
时,我找不到正确配置模块分辨率的方法

这是一种结构:

。
├── 黄瓜
├── 特征
│   └── 银行账户特征
├── package.json
├── package-lock.json
├── 步骤定义
│   └── 银行账户
├── 支持
│   └── 模型
│       └── 银行账户.model.ts
├── tsconfig.json
└── tslint.json
我使用的是
tsflow
,因此“步骤定义”如下所示:

//从“@model/bank account.model”导入{BankAccount}”//。。。麻烦
从“./support/model/bank account.model”导入{BankAccount}”;
从“chai”导入{expect};
从“CUMBURE tsflow”导入{binding,given,then,when};
@绑定()
导出类BankAccountSteps{
...
@当({int}存放时)
公共时间(金额:个){
本.账户.存款(金额);
}
...
}
…但是我不能使用
@model/bank account.model
,即使我在
tsconfig.json
cucumber.js
中正确配置了它:

# file: tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    ...
    "paths": {
      "*": ["./*"],
      "@model/*": ["./support/model/*"]
    },
    ...
    "types": [
      "@types/chai",
      "@types/cucumber",
      "node"
    ]
  },
  "exclude": ["node_modules/"],
  "include": ["./step-definitions/**/*", "./support/**/*"]
}
一旦我在cucumber.js中“激活”
tsconfig path
–读:uncomment
“--要求模块tsconfig path/register”
,我就会收到以下错误消息:

$npm运行测试
>CumberJS——配置文件默认值
TypeError:cumber_1.Before不是函数
一次性(/home/x80486/Workshop/Development/cucumber basics/node_modules/cucumber tsflow/src/binding decorator.ts:78:3)
在/home/x80486/Workshop/Development/cucumber basics/node_modules/underline/underline.js:957:21
at/home/x80486/Workshop/Development/cucumber basics/node_modules/cucumber tsflow/src/binding decorator.ts:38:5
在装饰(/home/x80486/Workshop/Development/cumber basics/step definitions/bank account.steps.ts:5:95)
反对。(/home/x80486/Workshop/Development/cumber basics/step definitions/bank account.steps.ts:8:30)
at模块编译(内部/modules/cjs/loader.js:776:30)
在Module.m._compile(/home/x80486/Workshop/Development/cumber basics/node_modules/ts node/src/index.ts:473:23)
at Module._extensions..js(internal/modules/cjs/loader.js:787:10)
at Object.require.extensions.(匿名函数)[as.ts](/home/x80486/Workshop/Development/cucumber basics/node_modules/ts node/src/index.ts:476:12)
at Module.load(内部/modules/cjs/loader.js:653:32)
在tryModuleLoad(内部/modules/cjs/loader.js:593:12)
at Function.Module._load(内部/modules/cjs/loader.js:585:3)
at Module.require(内部/modules/cjs/loader.js:690:17)
根据需要(内部/modules/cjs/helpers.js:25:18)
位于supportcodepath.forEach.codePath(/home/x80486/Workshop/Development/cucumber basics/node_modules/cumber/lib/cli/index.js:142:42)
在Array.forEach()处
任何精通打字和/或Cucumber的人都可以了解这里发生了什么


更新

如果我删除
cucumber.js
并通过
npm
脚本中的所有选项(
“测试”:“cucumber js features/***/.feature--需要模块ts节点/寄存器--需要模块tsconfig路径/寄存器--需要步骤定义/***/.ts--需要支持/***.ts”
),它的工作原理如下:


另外,将
baseUrl
更改为
“/”
以外的内容,例如,
“/support”
,不删除cucumber.js就可以了。

我看到的第一件事是在你的cucumber配置文件中,你引用的是ts文件,而不是我相信cucumber js所寻找的编译过的类型脚本。尝试:

const common = [
  "features/**/*.feature",
  "--require-module ts-node/register",
  // "--require-module tsconfig-paths/register",
  "--require step-definitions/**/*.js",
  "--require support/**/*.js"
].join(" ");
此外,我不认为这是一个问题,但我总是将文件类型添加到tsconfig文件的include末尾


我一直在计划将一个带有typescript的cucumber js项目示例放到github上供人们使用,所以也许这就是我需要的动机:)

不是解决这个问题的答案,但这目前正在使用
@cucumber/cumber
版本
7.x
——可能是将更改后移植到以前的稳定版本


是一个正在运行的(类似于模板的项目)来测试这一点。

感谢您的提示,但这会使所有场景都失败,因为它无法识别已声明的任何内容。这一行:
——要求模块ts节点/寄存器
为TypeScript制作技巧;它将在飞行中传输-类似于Jest所做的。此配置没有ECMAScript输出。感谢您共享更新!我有同样的问题,因为我使用路径别名
const common = [
  "features/**/*.feature",
  "--require-module ts-node/register",
  // "--require-module tsconfig-paths/register",
  "--require step-definitions/**/*.js",
  "--require support/**/*.js"
].join(" ");