首页 > 解决方案 > 如何让 Jest 识别以 # 开头的 ES6 绝对路径导入?

问题描述

根据NodeJS,他们建议在绝对路径前加上 #。运行 Jest 时,它无法识别如何找到这些模块。我收到一个错误Cannot find module '#loaders/logger' from 'src/loaders/logger.js',因为我使用这些绝对路径导入。

import { logger } from "#loaders/logger";

export const fn1 = () => { 
  // does something 
}

我把它放在src里面jest.moduleDirectories,但它在理解 # 时遇到了问题。如何使用此表示法使 Jest 解析到正确的路径?

包.json

{
    "engines": {
        "node": ">=14.x.x",
        "npm": ">=6.14.11"
    },
    "type": "module",
    "imports": {
        "#src/*": "./src/*.js",
        "#loaders/*": "./src/loaders/*.js",
    },
    "jest": {
        "moduleDirectories": [
            "node_modules",
            "src"
        ]
    },
    "scripts": {
        "test": "NODE_OPTIONS=--experimental-vm-modules npm jest",
    },
}

标签: node.jsecmascript-6importpathjestjs

解决方案


根据文档添加moduleNameMapper到我的 Jest 配置中

包.json

{
    "jest": {
        "moduleDirectories": [
            "node_modules",
            "src"
        ],
        "moduleNameMapper": {
            "#loaders": "<rootDir>/src/loaders",
            "#(.*)": [
                "<rootDir>/src/embedded/path/$1",
                "<rootDir>/src/$1",
                "<rootDir>/src"
            ]
        }
    },
}

推荐阅读