在 monorepo 中使用 tyescript 开玩笑不适用于根文件夹之外的依赖项
Jest with tyescript in monorepo doesn't work with dependency out of the root folder
我将 Jest 与 Typescript 结合使用。我想创建一个 monorepo。
我的文件夹结构是:
fe
|-app1
|--.jest.config.ts
|--tsconfig.json
|-shared
|--dummyData.ts
我想要 app1
的单元测试来访问 shared
文件夹中的一些数据。
fe/app1/demo.spec.ts
:
import { someData } from '@shared/dummyData' //<--HERE: the alias is works, but jest can not understand "export" keyword
descrube('demo' () => {
it('demo test', () => {
expect(someData).toBe('DUMMY'));
})
})
fe/shared/dummyData.ts
:
export const someData = 'DUMMY';
问题是 jest 抛出一个错误:
Jest encountered an unexpected token
{"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export const someData = 'DUMMY';
^^^^^^
据我了解,它无法解析由 ts 和 babel 生成的 typescript 或 es6 模块。
当 shared
文件夹位于 app1
内时,它 工作正常,但一旦它位于外部(和根文件夹外部,i.g '<rootDir>/../shared/'
) 它开始抛出那个错误。
这是我的配置:
我在 fe/app1/tsconfig.json
中描述了别名:
{
...
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"paths": {
"@/*": ["app/src/*"],
"@shared/*": ["shared/*"]
}
}
}
并且在 fe/app1/.jest.config.ts
中:
module.exports = {
...
transform: {
'^.+\.js$': '<rootDir>/node_modules/babel-jest',
'^.+\.(jsx?|tsx?)$': 'ts-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/',
'^@shared/(.*)$': '<rootDir>/../shared/',
}
}
一些想法:
- 据我所知,我必须告诉开玩笑对 rootDir 之外的代码应用相同的解析器(babel 等)。
- 我想可以在根文件夹中创建一个
tsconfig
(fe
),但我想从 fe/app1
文件夹启动单元测试...
- 也许可以配置具有
projects
、roots
等属性的东西,但到目前为止我运气不好。
好的,我找到了解决方案:
对于 monorepo,将 babel 配置作为 JS 文件很重要
所以,只需将 .babelrc
重命名为 babel.config.js
(在你调用 jest 的文件夹中,在我的例子中是 fe/app1
)
有关更多信息,您可以查看 this comment (and maybe this thread)
我将 Jest 与 Typescript 结合使用。我想创建一个 monorepo。 我的文件夹结构是:
fe
|-app1
|--.jest.config.ts
|--tsconfig.json
|-shared
|--dummyData.ts
我想要 app1
的单元测试来访问 shared
文件夹中的一些数据。
fe/app1/demo.spec.ts
:
import { someData } from '@shared/dummyData' //<--HERE: the alias is works, but jest can not understand "export" keyword
descrube('demo' () => {
it('demo test', () => {
expect(someData).toBe('DUMMY'));
})
})
fe/shared/dummyData.ts
:
export const someData = 'DUMMY';
问题是 jest 抛出一个错误:
Jest encountered an unexpected token
{"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export const someData = 'DUMMY';
^^^^^^
据我了解,它无法解析由 ts 和 babel 生成的 typescript 或 es6 模块。
当 shared
文件夹位于 app1
内时,它 工作正常,但一旦它位于外部(和根文件夹外部,i.g '<rootDir>/../shared/'
) 它开始抛出那个错误。
这是我的配置:
我在 fe/app1/tsconfig.json
中描述了别名:
{
...
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"paths": {
"@/*": ["app/src/*"],
"@shared/*": ["shared/*"]
}
}
}
并且在 fe/app1/.jest.config.ts
中:
module.exports = {
...
transform: {
'^.+\.js$': '<rootDir>/node_modules/babel-jest',
'^.+\.(jsx?|tsx?)$': 'ts-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/',
'^@shared/(.*)$': '<rootDir>/../shared/',
}
}
一些想法:
- 据我所知,我必须告诉开玩笑对 rootDir 之外的代码应用相同的解析器(babel 等)。
- 我想可以在根文件夹中创建一个
tsconfig
(fe
),但我想从fe/app1
文件夹启动单元测试... - 也许可以配置具有
projects
、roots
等属性的东西,但到目前为止我运气不好。
好的,我找到了解决方案:
对于 monorepo,将 babel 配置作为 JS 文件很重要
所以,只需将 .babelrc
重命名为 babel.config.js
(在你调用 jest 的文件夹中,在我的例子中是 fe/app1
)
有关更多信息,您可以查看 this comment (and maybe this thread)