gpt4 book ai didi

javascript - 使用 React 从 Babel 迁移到 SWC

转载 作者:行者123 更新时间:2023-12-05 00:31:55 57 4
gpt4 key购买 nike

TL;博士
如何翻译这样的 Node 脚本:

"test": "NODE_ENV=test riteway -r @babel/register 'src/**/*.test.js' | tap-nirvana",
使用 SWC而不是通天塔?

语境
我们最近升级了 Next.js 版本。 Next.js 现在支持 SWC instead of Babel.
我们项目中的 React 单元测试是用 RITEway 编写的。 .测试命令为:
"test": "NODE_ENV=test riteway -r @babel/register 'src/**/*.test.js' | tap-nirvana",
它首先使用 Babel 转换文件,否则 import语句和 JSX 会导致错误。
在我们尝试迁移到 SWC 的过程中,我们对 CLI 不满意。但是,我们发现 @swc-node/register package .它允许我们像这样转换我们的命令:
"test": "riteway -r @swc-node/register src/**/*.test.js | tap-nirvana"
它修复了新语法,如 import语句和这样的测试将运行:
import { describe } from 'riteway';

describe('my test', async assert => {
assert({
given: 'true',
should: 'be true',
actual: true,
expected: true,
});
});
但是,像这样对 React 组件进行测试
import { describe } from 'riteway';
import render from 'riteway/render-component';

import Authentication from './user-authentication-component';

describe('user authentication component', async assert => {
const $ = render(<Authentication />);

assert({
given: 'just rendering',
should: "render 'Authentication'",
actual: $('*:contains("Authentication")').text(),
expected: 'Authentication',
});
});
仍然抛出以下错误:
$ yarn test
yarn run v1.22.17
$ riteway -r @swc-node/register src/**/*.test.js | tap-nirvana
/Users/user/dev/learning-flow/node_modules/@swc/core/index.js:135
return bindings.transformSync(isModule ? JSON.stringify(src) : src, isModule, toBuffer(newOptions));
^

Error: error: Expression expected

|
7 | const $ = render(<Authentication />);
| ^

error: Expression expected

|
7 | const $ = render(<Authentication />);
| ^

error: Unexpected token `)`. Expected this, import, async, function, [ for array literal, { for object literal, @ for decorator, function, class, null, true, false, number, bigint, string, regexp, ` for template literal, (, or an identifier

|
7 | const $ = render(<Authentication />);
| ^



Caused by:
0: failed to process js file
1: Syntax Error
at Compiler.transformSync
我们如何创建该命令以使其与 SWC 一起运行?

最佳答案

我假设您的问题只是关于玩笑,而不是关于 swc 的 webpack 设置。
我自己从来没有在玩笑中使用过 swc,所以这只是在黑暗中拍摄,但我找到了一个名为 @sec-node/jest 的玩笑包它允许您使用变压器,例如:

module.exports = {
transform: {
'^.+\\.(t|j)sx?$': ['@swc-node/jest'],
},
}
这应该允许您转译所有 [jt]sx?进口。
还有一个叫 @swc/jest这似乎做同样的事情。
我会从尝试这些开始。
您的问题是 jest 无法解析您的代码,例如,如果您使用的是 typescript ,则需要 ts-jest 之类的东西为了为您解析您的 TS,我认为在这种情况下您需要一个 swc/jest转译器应该首先编译你的代码并将其输出到内存,然后将它汇集到 jest 运行它。
另一种方法是您可以使用 swc 手动编译测试,然后在编译的文件上运行 jest 作为单独的步骤。至少使用 TS 可以做到这一点,首先使用 tsc 编译所有内容然后在 .js 上运行 jest输出。我确信swc应该工作相同。
至于为什么 @swc-node/register您使用的软件包不起作用,我不知道。

关于javascript - 使用 React 从 Babel 迁移到 SWC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69956543/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com