9个版本 (5个重大变更)
0.99.0 | 2024年7月18日 |
---|---|
0.90.24 | 2024年3月22日 |
0.90.6 | 2024年2月23日 |
0.89.2 | 2024年1月26日 |
0.79.19 | 2023年8月12日 |
#5 in #jest
每月113次下载
43KB
736 行
[SWC插件] 可变CJS导出
这是一个用于生成可变CJS导出的SWC插件。
此SWC插件仅针对与jest的兼容性进行了测试。它应与@swc/jest
一起使用。
该项目之前被称为jest_workaround
插件版本
http://swc.rust-lang.net.cn/docs/plugin/selecting-swc-core
用法
安装
npm i -D jest @swc/core @swc/jest swc_mut_cjs_exports
// 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 = [
["swc_mut_cjs_exports", {}],
];
module.exports = {
transform: {
"^.+\\.(t|j)sx?$": ["@swc/jest", swcrc],
},
};
请确保您的.swcrc
文件中的module.type
设置为commonjs
,因为此插件不会触及非workaround部分,例如导入语句。
常见问题解答
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
作为解决方案。
依赖项
~5.5–7.5MB
~154K SLoC