@ant-design/icons
import { BookOutlined } from “@ant-design/icons”;
SyntaxError: Named export ‘BookOutlined’ not found. The requested module ‘@ant-design/icons’ is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from ‘@ant-design/icons’;
const { BookOutlined } = pkg;
原因:此问题从 5.2.x 开始出现,代码的导出方式发生了变化,es 文件夹下的代码也全部失去了拓展名,
- 使其无法像过去 5.1 通过 esm 模式引入,是一次严重的破坏性更新
- 使得原先不需要编译,通过 nodejs 18+ 直接运行的代码(一般用在单元测试中)在新版无法执行
解决:暂时锁定在 5.1.x 版本避免这个问题,不要安装 5.2.6 最新版
https://github.com/ant-design/ant-design-icons/issues/605
# 把最新的 5.2.6 版本降级到 5.1.4
"@ant-design/icons": "^5.1.4",
https://www.npmjs.com/package/@ant-design/icons?activeTab=versions
�
第二种解决方案:不要服务端渲染,在客户端渲染,一次性导出 icons
import * as antdIcons from '@ant-design/icons';
const { FormOutlined } = antdIcons
type: mobule
which may not support all module.exports as named exports
import { BitcoinCircleColorful, EthereumFilled } from ‘@ant-design/web3-icons’;
SyntaxError: Named export ‘BitcoinCircleColorful’ not found. The requested module ‘@ant-design/web3-icons’ is a CommonJS module, which may not support all module.exports as named exports.
原因
- CommonJS 和 ES Module 不能共存
- CJS 使用的是 require() 和 module.exports;ESM 用的是是 import 和 exports
- CJS 模块不能使用 import 语法
- 为了加载ES模块,需要在package.json中设置 “type”: “module” 或者使用.mjs扩展
Remix不支持服务器上的ESM;使用 serverDependenciesToBundle 让Remix将这些转换为CJS
解决:remix.config.js 配置 serverDependenciesToBundle: [‘@ant-design/web3-icons’]
https://remix.run/docs/en/main/guides/gotchas#importing-esm-packages
为啥 antd不报错,因为 antd 支持服务端渲染;@ant-design/web3-icons 不支持服务端渲染