#swc-plugin #swc #jest #cjs #commonjs

swc_mut_cjs_exports

[SWC插件] 可变CJS导出

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

Download history 112/week @ 2024-07-17 1/week @ 2024-07-24

每月113次下载

MIT许可

43KB
736

[SWC插件] 可变CJS导出

Crates.io npm

Test SWC Compat Test with @swc/core@latest with @swc/core@nightly

这是一个用于生成可变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