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
每月下载量 69
43KB
796 行代码(不含注释)
[SWC 插件] Jest 兼容性问题解决方案
这是一个用于处理 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