Webpack服务器添加后,MaterialUI(MUI)错误:"getUtilityClass 不是一个函数"
P粉056618053
P粉056618053 2023-09-14 19:05:55
0
1
629

我在启动项目后遇到了这个错误: 浏览器运行时错误。 我唯一做的事情就是添加webpack。这是webpack配置文件的参考:

const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const Dotenv = require('dotenv-webpack');

const config = {
  entry: './src/index.tsx',
  mode: 'development',
  devtool: 'source-map',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  module: {
    noParse: [/\/node_modules\/@tanstack\/react-query-devtools\//],
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      },
      {
        test: /\.png$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              mimetype: 'image/png'
            }
          }
        ]
      },
      {
        test: /\.svg$/,
        use: 'file-loader'
      },
      {
        test: /\.ts(x)?$/,
        loader: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  plugins: [
    new Dotenv(),
    new HtmlWebpackPlugin({
      template: "./src/index.html",
    }),
  ],
  resolve: {
    extensions: [
      '.tsx',
      '.ts',
      '.js'
    ]
  },
  devServer: {
    port: 3000, // 将端口3000添加到开发服务器
    hot: true, // 启用热模块替换(HMR)
    open: true, // 服务器启动时在默认浏览器中打开应用程序
    static: {
      directory: path.resolve(__dirname, 'dist'), // 设置用于提供文件的基本目录
    }
  }
};

module.exports = config;

然后我开始遇到materialUI错误。起初我以为是我不小心更新了package.json文件,但事实并非如此。我还想指出的是,添加webpack之前它是可以工作的。我所做的只是配置webpack并安装一些依赖项(这些依赖项不会影响先前的依赖项或版本!)。 在将webpack添加到项目后,我还遇到了另一个错误,我使用'patch-package'库进行了修复,使用以下补丁文件:

diff --git a/node_modules/@mui/material/SvgIcon/SvgIcon.js b/node_modules/@mui/material/SvgIcon/SvgIcon.js
index 9c80c7b..b254159 100644
--- a/node_modules/@mui/material/SvgIcon/SvgIcon.js
+++ b/node_modules/@mui/material/SvgIcon/SvgIcon.js
@@ -8,7 +8,7 @@ import { unstable_composeClasses as composeClasses } from '@mui/base';
 import capitalize from '../utils/capitalize';
 import useThemeProps from '../styles/useThemeProps';
 import styled from '../styles/styled';
-import { getSvgIconUtilityClass } from './svgIconClasses';
+import svgIconClasses from './svgIconClasses';
 import { jsx as _jsx } from "react/jsx-runtime";
 import { jsxs as _jsxs } from "react/jsx-runtime";
 const useUtilityClasses = ownerState => {
@@ -20,7 +20,7 @@ const useUtilityClasses = ownerState => {
   const slots = {
     root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]
   };
-  return composeClasses(slots, getSvgIconUtilityClass, classes);
+  return composeClasses(slots, svgIconClasses, classes);
 };
 const SvgIconRoot = styled('svg', {
   name: 'MuiSvgIcon',

这是通过补丁修复的先前错误:

我尝试使用多个版本的node(nodejs)来查看是否可以多次遇到错误。但无论是在node 14.15.0还是18.15.0中都无法工作。

另一个奇怪的事情是,我什至在项目中找不到"getUtilityClass"这个词(在vsCode中使用ctr + shit + f查找)。

P粉056618053
P粉056618053

全部回复(1)
P粉539055526

问题确实出在依赖关系上。在安装某些库时,我可能漏掉了一些东西。当我恢复到旧的package-json文件,并只添加我需要的依赖后,通过npm install安装后,项目就正常工作了!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!