dumi
dumi copied to clipboard
SWC 编译在某些设备上失效
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
因为没有 win 设备, 且不确定是不是中文文件夹的问题 🤔
我用其他电脑安装启动没问题 都是Windows系统, 但是不知道为什么我用办公电脑安装启动 就不能解析md文件中的jsx代码块 应该不是中文文件夹的问题 这个是外面层的随便起了个名字
嗯嗯, 不过这个错误消息好眼熟, 一时半会儿想不起来了就 😭
确实 只能一步一步试试了
这个应该和 SWC 有关系,之前群里有同学反馈过有一台 Windows 设备没法编译,其余设备又是好的,目前怀疑与 SWC 和操作系统/芯片架构的兼容性有关系,但因为无法复现所以比较难定位
有兴趣的话帮忙排查下看有没有解法,以及看下 SWC 社区有没有类似的反馈
我也是这个问题 node:16.19.1 只有一台win11机器出问题 其他都能跑起来 刚刚解决了 dumirc.ts codeBlockMode:'passive' 设置了后能跑起来了,
但是这个设置 相当于没有渲染demo中的代码了
win11系统,nod:16.16.0,yarn:1.22.19,项目启动后同样的报错
这个问题暂时没找到原因,遇到的设备可以用 code 标签写外部 demo,外部 demo 不会走 SWC
同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。
排查思路:
- dumi 报错 bindings not found ,是 swc 没有对应的二进制包
- 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
- dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
- 使用
node -e 'console.log(require("@swc/core-win32-x64-msvc"))'
排查 swc 是否工作正常 - 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
- 步骤4,再次测试可以了
参考: https://github.com/nodejs/node/issues/47290
此问题并非 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
同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。
排查思路:
- dumi 报错 bindings not found ,是 swc 没有对应的二进制包
- 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
- dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
- 使用
node -e 'console.log(require("@swc/core-win32-x64-msvc"))'
排查 swc 是否工作正常- 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
- 步骤4,再次测试可以了
npm -v 7.7.6; node -v 18.16.0; 我更新的是VC_redist.x64.exe; 以上步骤没问题, 但启动后还是包第三步骤的错误,啥情况
同事在 win10 x64 遇到了这个问题,此问题并非 swc 的问题,而是 node 与 vc 依赖版本问题,通过更新最新版本 vc++ lib 可以解决。 排查思路:
- dumi 报错 bindings not found ,是 swc 没有对应的二进制包
- 在node_modules看下swc的二进制包是不是装好了. 如果没有手动装下 @swc/core ,确保 @swc/core-win32-x64-msvc 包存在
- dumi 报错 'import' and 'export'may only appear at the top level ,说明代码未被编译,swc 可能没有工作
- 使用
node -e 'console.log(require("@swc/core-win32-x64-msvc"))'
排查 swc 是否工作正常- 如果报错(DLOPEN_FAILED),是 swc.node 加载失败,尝试更新vc依赖 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170
- 步骤4,再次测试可以了
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
node -e 'console.log(require("@swc/core-win32-x64-msvc"))' 执行结果是一样的, 其他也验证没问题,当启动还是一样报步骤三的错误;
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 未工作的原因,但具体原因我就无法给出建议了。
可以了 主要原因应该就是vc依赖的问题; 执行npm i -D @swc/cli @swc/core后,启动正常;建议后续更新vc依赖后,启动报错的话,可以更新下@swc/core;
注意,node.js一定要16.20版本以上,低版本也会报错 'import' and 'export'may only appear at the top level