在monorepo中使用笑话+打字稿

时间:2019-06-27 15:32:38

标签: typescript jestjs

我目前正在尝试在Typescript monorepo中使用笑话(不是Lerna或其他baseURLpaths,也不是我的决定),而我正在测试的文件之一会导入来自monorepo的东西。


import {publish, subscribe} from "message-bus"

现在我的tsconfig.json中有:

...
    "compilerOptions": {
        "baseUrl": "./packages",
        "paths": {
            "message-bus":["message-bus/src"],
        }, 
...

并在软件包jest.config.js中:

module.exports = {
...
  preset: 'ts-jest',
  moduleNameMapper: {
    '^message-bus/(.*)$': "../message-bus/src/$1"
  }
...
}

即使所有这些都准备就绪,jest仍抱怨找不到模块message-bus。你能帮我修复我的配置吗?

1 个答案:

答案 0 :(得分:0)

假设jest.config.js位于软件包的根目录而不是monorepo,则需要moduleNameMapper形成一条可以从任何位置理解的路径。您可以从jest.config.js文件所在的目录开始,然后从那里建立路径。这将为您的映射模块创建一个绝对路径。

此外,您还需要在正则表达式捕获组中使用斜杠(/),因为它并不总是在路径中。

const path = require('path');

module.exports = {
  ...
  preset: 'ts-jest',
  moduleNameMapper: {
    '^message-bus(.*)$': path.join(__dirname, '../message-bus/src$1')
  }
  ...
}