版本
node:v14.16.1
npm:v8.2.0
react: v17.0.1
umi:v3.5.0
antd:v4.17.3
1. Umi项目安装react-devtools之后项目启动后报错TypeError: Cannot read property ‘forEach’ of undefined。
有3种解决方案:
- 禁用react-devtools;
- 根据报错找到报错文件的代码注释掉,例如:my-app\node_modules\umi\node_modules\@umijs\preset-built-in\bundled\@pmmmwh\react-refresh-webpack-plugin\client\ReactRefreshEntry.js
- 低版本的React-DevTools会引发react-refresh-webpack-plugin报错,升级版本。
issue传送门:https://github.com/umijs/umi/issues/6432
2. Umi项目使用Formily表单样式失效问题。
Ant-design-pro@4.0、umi@^3.5.0、formily@2.x出现表单样式问题,之前怀疑是开了MFSU导致的bug,后来发现不是,解决方案:在配置文件中加@formily/antd按需加载,+72~78行。
/config.ts
import { defineConfig } from 'umi';
import { join } from 'path';
import defaultSettings from './defaultSettings';
import proxy from './proxy';
import routes from './routes';
const { REACT_APP_ENV } = process.env;
export default defineConfig({
hash: true,
antd: {},
dva: {
hmr: true,
},
layout: {
// https://umijs.org/zh-CN/plugins/plugin-layout
locale: true, // 关闭国际化语言
siderWidth: 208,
...defaultSettings,
},
// https://umijs.org/zh-CN/plugins/plugin-locale
locale: {
// default zh-CN
default: 'zh-CN',
antd: true,
// default true, when it is true, will use `navigator.language` overwrite default
baseNavigator: true,
},
dynamicImport: {
loading: '@ant-design/pro-layout/es/PageLoading',
},
targets: {
ie: 11,
},
// umi routes: https://umijs.org/docs/routing
routes,
// Theme for antd: https://ant.design/docs/react/customize-theme-cn
theme: {
'primary-color': defaultSettings.primaryColor,
'root-entry-name': 'default',
},
// esbuild is father build tools
// https://umijs.org/plugins/plugin-esbuild
esbuild: {},
title: false,
ignoreMomentLocale: true,
proxy: proxy[REACT_APP_ENV || 'dev'],
manifest: {
basePath: '/',
},
// Fast Refresh 热更新
fastRefresh: {},
openAPI: [
{
requestLibPath: "import { request } from 'umi'",
// 或者使用在线的版本
// schemaPath: "https://gw.alipayobjects.com/os/antfincdn/M%24jrzTTYJN/oneapi.json"
schemaPath: join(__dirname, 'oneapi.json'),
mock: false,
},
{
requestLibPath: "import { request } from 'umi'",
schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
projectName: 'swagger',
},
],
nodeModulesTransform: { type: 'none' },
mfsu: {},
webpack5: {},
exportStatic: {},
extraBabelPlugins: [
[
'babel-plugin-import',
{ libraryName: '@formily/antd', libraryDirectory: 'esm', style: true },
'@formily/antd',
],
],
});
3.项目启动中出现警告require()
原因:@umijs/preset-ui文件/依赖中有用动态 require 语法,开启MFSU之后建议使用esm module import,否则将打破mfsu预构建匹配,出现如下图警告。
解决:目前测出是使用了umi-ui导致的把@umijs/preset-ui”: “^2.2.9卸载就可以解决(同时编译速度会提高10s左右),但是卸载就无法使用umi-ui,暂时保留容忍了。
参考:https://github.com/umijs/umi/issues/6766