#jest #swc-plugin #workaround #issue #compatibility #npm

jest_workaround

[SWC 插件] Jest 兼容性问题解决方案

21 个版本 (6 个重大更新)

0.79.19 2023年7月19日
0.76.0 2023年5月11日
0.72.6 2023年3月30日
0.1.13 2022年11月6日
0.1.5 2022年7月29日

#1 in #workaround

Download history 5/week @ 2024-03-10 85/week @ 2024-03-31

每月下载量 69

MIT 许可证

43KB
796 行代码(不含注释)

[SWC 插件] Jest 兼容性问题解决方案

Crates.io npm

Test with @swc/core@latest

这是一个用于处理 Jest 兼容性问题的 SWC 插件。

应使用 @swc/jest 与此 SWC 插件一起使用。

插件版本

https://swc.rust-lang.net.cn/docs/plugin/selecting-swc-core

使用方法

安装

npm i -D jest @swc/core @swc/jest jest_workaround
// jest.config.js
const fs = require("node:fs");

const swcrc = JSON.parse(fs.readFileSync(".swcrc", "utf8"));

// If you have other plugins, change this line.
((swcrc.jsc ??= {}).experimental ??= {}).plugins = [["jest_workaround", {}]];

module.exports = {
  transform: {
    "^.+\\.(t|j)sx?$": ["@swc/jest", swcrc],
  },
};

请确保在您的 .swcrc 中将 module.type 设置为 commonjs,因为此插件不会修改非解决方案部分,如导入语句。

常见问题解答

1. 何时需要此插件?

如果您使用 swc 编译器将代码转换为符合 ESM 规范,但同时在 CJS 环境中使用 Jest 进行测试,您可能会遇到由于 exports 的不可变性而产生的问题。

此插件可以通过将 export 语句转换为可变 exports 来帮助解决这个问题。

2. 有没有更好的选择?

您可能根据具体需求有其他选择。

  • 如果您能够在 ESM 环境中运行 Jest,可以使用 swc 将 TypeScript/JSX 语法进行转换或降级 JavaScript 语法而不进行模块转换。只需将 module.type 的值设置为 es6 即可实现这一点。

  • 随着时间的推移,可能解决了一些与在 ESM 环境中运行 Jest 相关的问题。请关注 facebook/jest#9430 以获取更新。

  • 如果您不需要 ESM 的具体行为,可以坚持使用 CJS 语法以获得 CJS 的 exports 行为。

在使用此插件之前,考虑这些选项可能是有益的。

CJS 语法

exports.foo = function foo() {
  return 42;
};

CTS(CJS 在 TypeScript) 语法

export = {
  foo: function foo() {
    return 42;
  },
};

注意

  • ESM 风格导出在转换为 CJS 时意味着不可变导出
  • ESM 风格导入在转换为 CJS 时意味着提升的 require

3. 插件版本升级后,更改未生效。

这是一个已知问题。您可以通过运行 jest --clearCache 来清除 Jest 缓存作为解决方案。

依赖项

~5–12MB
~144K SLoC