版本

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种解决方案:

  1. 禁用react-devtools;
  2. 根据报错找到报错文件的代码注释掉,例如:my-app\node_modules\umi\node_modules\@umijs\preset-built-in\bundled\@pmmmwh\react-refresh-webpack-plugin\client\ReactRefreshEntry.js

1638435076(1).png

  1. 低版本的React-DevTools会引发react-refresh-webpack-plugin报错,升级版本。

issue传送门:https://github.com/umijs/umi/issues/6432

2. Umi项目使用Formily表单样式失效问题。

7a2e7ddd9bc4e9c69c218fe575aeebb.png
Ant-design-pro@4.0、umi@^3.5.0、formily@2.x出现表单样式问题,之前怀疑是开了MFSU导致的bug,后来发现不是,解决方案:在配置文件中加@formily/antd按需加载,+72~78行。
/config.ts

  1. import { defineConfig } from 'umi';
  2. import { join } from 'path';
  3. import defaultSettings from './defaultSettings';
  4. import proxy from './proxy';
  5. import routes from './routes';
  6. const { REACT_APP_ENV } = process.env;
  7. export default defineConfig({
  8. hash: true,
  9. antd: {},
  10. dva: {
  11. hmr: true,
  12. },
  13. layout: {
  14. // https://umijs.org/zh-CN/plugins/plugin-layout
  15. locale: true, // 关闭国际化语言
  16. siderWidth: 208,
  17. ...defaultSettings,
  18. },
  19. // https://umijs.org/zh-CN/plugins/plugin-locale
  20. locale: {
  21. // default zh-CN
  22. default: 'zh-CN',
  23. antd: true,
  24. // default true, when it is true, will use `navigator.language` overwrite default
  25. baseNavigator: true,
  26. },
  27. dynamicImport: {
  28. loading: '@ant-design/pro-layout/es/PageLoading',
  29. },
  30. targets: {
  31. ie: 11,
  32. },
  33. // umi routes: https://umijs.org/docs/routing
  34. routes,
  35. // Theme for antd: https://ant.design/docs/react/customize-theme-cn
  36. theme: {
  37. 'primary-color': defaultSettings.primaryColor,
  38. 'root-entry-name': 'default',
  39. },
  40. // esbuild is father build tools
  41. // https://umijs.org/plugins/plugin-esbuild
  42. esbuild: {},
  43. title: false,
  44. ignoreMomentLocale: true,
  45. proxy: proxy[REACT_APP_ENV || 'dev'],
  46. manifest: {
  47. basePath: '/',
  48. },
  49. // Fast Refresh 热更新
  50. fastRefresh: {},
  51. openAPI: [
  52. {
  53. requestLibPath: "import { request } from 'umi'",
  54. // 或者使用在线的版本
  55. // schemaPath: "https://gw.alipayobjects.com/os/antfincdn/M%24jrzTTYJN/oneapi.json"
  56. schemaPath: join(__dirname, 'oneapi.json'),
  57. mock: false,
  58. },
  59. {
  60. requestLibPath: "import { request } from 'umi'",
  61. schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
  62. projectName: 'swagger',
  63. },
  64. ],
  65. nodeModulesTransform: { type: 'none' },
  66. mfsu: {},
  67. webpack5: {},
  68. exportStatic: {},
  69. extraBabelPlugins: [
  70. [
  71. 'babel-plugin-import',
  72. { libraryName: '@formily/antd', libraryDirectory: 'esm', style: true },
  73. '@formily/antd',
  74. ],
  75. ],
  76. });

3.项目启动中出现警告require()

原因:@umijs/preset-ui文件/依赖中有用动态 require 语法,开启MFSU之后建议使用esm module import,否则将打破mfsu预构建匹配,出现如下图警告。
image.png
解决:目前测出是使用了umi-ui导致的把@umijs/preset-ui”: “^2.2.9卸载就可以解决(同时编译速度会提高10s左右),但是卸载就无法使用umi-ui,暂时保留容忍了。
参考:https://github.com/umijs/umi/issues/6766