Node v13 / Jest / ES6 — 对没有 babel 或 esm 的模块的本机支持

2023-12-21

是否可以使用 Jest 测试 ES6 模块而无需esm or babel? Since node v13原生支持es6已经尝试过:

//package.json
{
  …
  "type": "module"
  …
}



//__tests__/a.js
import Foo from '../src/Foo.js';


$ npx jest

Jest encountered an unexpected token
…
Details:

/home/node/xxx/__tests__/a.js:1
import Foo from '../src/Foo.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module

当 babel 添加转译器后,它可以工作,但是 es6 模块也可以原生使用吗?


是的,可以从[email protected] /cdn-cgi/l/email-protection。从这个版本开始,原生支持 esm,因此您不必再使用 babel 转译代码。

目前还没有记录,但根据这个问题 https://github.com/facebook/jest/issues/9430您必须执行 3 个简单步骤才能实现这一目标(在写这个答案时):

  • 确保你不会变身import通过设置语句transform: {}在你的笑话配置文件中
  • Run node@^12.16.0 || >=13.2.0 with --experimental-vm-modules flag
  • 运行你的测试jest-environment-node or jest-environment-jsdom-sixteen.

所以你的笑话配置文件应该至少包含以下内容:

export default {
    testEnvironment: 'jest-environment-node',
    transform: {}
    ...
};

并设置--experimental-vm-modules标志,你必须运行 Jestpackage.json如下 (我希望这在未来会改变):

"scripts": {
    "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}

我希望,这个答案对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node v13 / Jest / ES6 — 对没有 babel 或 esm 的模块的本机支持 的相关文章

随机推荐