dumi icon indicating copy to clipboard operation
dumi copied to clipboard

SWC 编译在某些设备上失效

Open jieGeA opened this issue 1 year ago • 17 comments

Question

Sample @Code

node [v16.14.0] npm 7.7.6

error ; /src/Foo/index.md?type-meta module build failed (from ./node_modules/@umijs/bundler-webpack/compiled/babel-7oader/index.js):5yntaxError:D:\UsersVDI Desktop 新建文件夹(2)srcFoo indexmd?type=meta: 'import' and 'export'may only appear at the top level.(6:0)

' foo-demo-0':{ component: React.lazy(async O=> {import [ Foo } fromcom-docs': export default (O=>/#PURE/ React.createElement(Foo,{title:"He1lo dumi!" 1:at instantiate(D:\Users\VDI\Desktop\新建文件夹 (2)node_modulesl@umijs\bund

jieGeA avatar May 29 '23 11:05 jieGeA

因为没有 win 设备, 且不确定是不是中文文件夹的问题 🤔

Wxh16144 avatar May 30 '23 02:05 Wxh16144

我用其他电脑安装启动没问题 都是Windows系统, 但是不知道为什么我用办公电脑安装启动 就不能解析md文件中的jsx代码块 应该不是中文文件夹的问题 这个是外面层的随便起了个名字

jieGeA avatar May 30 '23 02:05 jieGeA

嗯嗯, 不过这个错误消息好眼熟, 一时半会儿想不起来了就 😭

Wxh16144 avatar May 30 '23 02:05 Wxh16144

确实 只能一步一步试试了

jieGeA avatar May 30 '23 02:05 jieGeA

这个应该和 SWC 有关系,之前群里有同学反馈过有一台 Windows 设备没法编译,其余设备又是好的,目前怀疑与 SWC 和操作系统/芯片架构的兼容性有关系,但因为无法复现所以比较难定位

有兴趣的话帮忙排查下看有没有解法,以及看下 SWC 社区有没有类似的反馈

PeachScript avatar Jun 02 '23 07:06 PeachScript

我也是这个问题 node:16.19.1 只有一台win11机器出问题 其他都能跑起来 刚刚解决了 dumirc.ts codeBlockMode:'passive' 设置了后能跑起来了,

painoBoy avatar Jun 28 '23 08:06 painoBoy

但是这个设置 相当于没有渲染demo中的代码了

jieGeA avatar Jun 29 '23 06:06 jieGeA

win11系统,nod:16.16.0,yarn:1.22.19,项目启动后同样的报错

lai397826696 avatar Aug 15 '23 07:08 lai397826696

这个问题暂时没找到原因,遇到的设备可以用 code 标签写外部 demo,外部 demo 不会走 SWC

PeachScript avatar Aug 15 '23 07:08 PeachScript

同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。

排查思路:

  1. dumi 报错 bindings not found ,是 swc 没有对应的二进制包
  2. 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
  3. dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
  4. 使用 node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 排查 swc 是否工作正常
  5. 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
  6. 步骤4,再次测试可以了

参考: https://github.com/nodejs/node/issues/47290

hexf00 avatar Aug 17 '23 07:08 hexf00

此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决

@hexf00 厉害👍 感谢排查,困扰许久的问题终于破案了🎉

如果有精力可否帮 dumi 在 SWC 编译后添加校验,如果编译结果前后一致就报错引导用户更新 vc++ lib,log 格式可参考:https://github.com/umijs/dumi/blob/7e250d8039ad59e4dea969313dfc8f012b2fb0df/src/loaders/markdown/transformer/rehypeLink.ts#L77-L80

PeachScript avatar Aug 17 '23 08:08 PeachScript

同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。

排查思路:

  1. dumi 报错 bindings not found ,是 swc 没有对应的二进制包
  2. 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
  3. dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
  4. 使用 node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 排查 swc 是否工作正常
  5. 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
  6. 步骤4,再次测试可以了

参考: nodejs/node#47290

npm -v 7.7.6; node -v 18.16.0; 我更新的是VC_redist.x64.exe; 以上步骤没问题, 但启动后还是包第三步骤的错误,啥情况

jieGeA avatar Aug 18 '23 03:08 jieGeA

同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。 排查思路:

  1. dumi 报错 bindings not found ,是 swc 没有对应的二进制包
  2. 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
  3. dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
  4. 使用 node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 排查 swc 是否工作正常
  5. 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
  6. 步骤4,再次测试可以了

参考: nodejs/node#47290

npm -v 7.7.6; node -v 18.16.0; 我更新的是VC_redist.x64.exe; 以上步骤没问题, 但启动后还是包第三步骤的错误,啥情况

我的 node 版本是 16.20,麻烦你再次确认下 swc 是否正常工作。 在项目目录,执行 node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 的输出吗 ,如果工作正常应该类似这样的输出 https://github.com/swc-project/swc/issues/7161#issuecomment-1489000652

hexf00 avatar Aug 18 '23 09:08 hexf00

node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 执行结果是一样的, 其他也验证没问题,当启动还是一样报步骤三的错误;

jieGeA avatar Aug 18 '23 09:08 jieGeA

node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 执行结果是一样的, 其他也验证没问题,当启动还是一样报步骤三的错误;

那挺奇怪,听你的描述 swc 依赖项已经安装,但项目的 swc 仍未工作,是否是项目下缺少 swc 的依赖项(某种原因未成功安装上)?如果是这样的话,在项目手动执行下 npm i -D @swc/cli @swc/core 试试呢?注意,装好后把dumi的项目重启再试。

或者 npx swc ./file.js 转个文件试下,如果工作正常,可以排除是 swc 未工作的原因,但具体原因我就无法给出建议了。

hexf00 avatar Aug 18 '23 10:08 hexf00

可以了 主要原因应该就是vc依赖的问题; 执行npm i -D @swc/cli @swc/core后,启动正常;建议后续更新vc依赖后,启动报错的话,可以更新下@swc/core;

jieGeA avatar Aug 21 '23 03:08 jieGeA

注意,node.js一定要16.20版本以上,低版本也会报错 'import' and 'export'may only appear at the top level

17855827553 avatar Oct 23 '23 02:10 17855827553