javascript - 如何设置 Jest w/ESM 以识别 node_modules 中的非 cjs 模块

标签 javascript node.js jestjs es6-modules ts-jest

已成功设置 jest/esm,但偶尔会发布一个模块,同时指定 main key (用于 commonjs)和 module package.json 中的 key (对于 ESM) .这会导致 Jest 错误,例如 uuid module :

/repo/path/node_modules/uuid/dist/esm-browser/index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export { default as v1 } from './v1.js';
                                                                                      ^^^^^^
SyntaxError: Unexpected token 'export'

我可以看到 dist/esm-browser/index.jsmodule 指定的文件输入 package.json .
如何配置 Jest w/ESM 来处理这些情况,其中 node_modules 中的东西是 ESM?
Jest 配置:
{
    "resetMocks": true,
    "testEnvironment": "jsdom",
    "testMatch": [
      "**/src/**/*.(spec|test).[tj]s?(x)"
    ],
    "preset": "ts-jest/presets/default-esm",
    "extensionsToTreatAsEsm": [
      ".ts",
      ".tsx"
    ],
    "globals": {
      "ts-jest": {
        "useESM": true
      }
    },
    "globalSetup": "<rootDir>/jest/setup.cjs",
    "globalTeardown": "<rootDir>/jest/teardown.cjs",
    "watchPathIgnorePatterns": [
      "<rootDir>/.tmp"
    ],
    "moduleNameMapper": {
      "^~/(.*)$": "<rootDir>/src/$1",
      "^~components/(.*)$": "<rootDir>/src/components/$1",
      "^~util/(.*)$": "<rootDir>/src/util/$1",
      "^~types/(.*)$": "<rootDir>/src/types/$1"
    }
  }

最佳答案

我遇到了同样的问题,并且修复方法与此评论中提到的相同:https://github.com/nrwl/nx/issues/812#issuecomment-429420861在我的jest.config.js :

// list to add ESM to ignore
const esModules = ['uuid'].join('|');
// ...
module.exports = {
  //...
    transformIgnorePatterns: [`/node_modules/(?!${esModules})`],
  // ...
};

关于javascript - 如何设置 Jest w/ESM 以识别 node_modules 中的非 cjs 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72163561/

相关文章:

javascript - JS中将值从一个页面传递到另一个页面

javascript - 无法通过返回键终止应用程序(*应用程序中没有退出菜单)

javascript - 有什么是 Object.create() 可以做但工厂函数不能做的事情吗?

typescript - Sonarqube 测试报告 "report refers to a file which is not configured as a test file"当测试和源在一起时

reactjs - React 功能组件 Api 调用的 Jest Unit 测试用例

javascript - 如何将 "save"写入 Javascript 函数?

javascript - 日志仅显示四行数据之一

node.js - 如何为发布订阅实例化多个Redis连接(node.js + node_redis)

node.js - 更新 CloudFunctions 上的子集合

reactjs - 当我使用 useSelector 时,React 测试库无法工作