【问题标题】:Cannot import @material-ui/core/styles/MuiThemeProvider无法导入@material-ui/core/styles/MuiThemeProvider
【发布时间】:2020-02-14 09:05:47
【问题描述】:

我正在开发一个 React 项目,使用 Material UI React 组件。我想像这样在src/index.js 中导入MuiThemeProvider import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider"; .

但我明白了

找不到模块:无法解析“@material-ui/core/styles/MuiThemeProvider”

检查/node_modules/@material-ui/styles 没有MuiThemeProvider。我不明白。在另一台计算机上新安装项目,/node_modules/@material-ui/styles 包含MuiThemeProvider。我删除了node_modules 文件夹并使用yarn install 重新安装,但这并没有做任何事情。 当我在另一台计算机上新安装项目时,它工作正常。

这些是来自package.json的依赖项

"dependencies": {
    "@material-ui/core": "^4.5.0",
    "@material-ui/icons": "^3.0.2",
    "@turf/turf": "^5.1.6",
    "axios": "^0.18.0",
    "epsg-index": "^0.27.0",
    "immutable": "^3.8.2",
    "immutable-prop-types": "^0.0.3",
    "lodash": "^4.17.11",
    "mapbox-gl": "^1.2.0",
    "moment": "^2.22.2",
    "particles.js": "^2.0.0",
    "phoenix": "^1.4.8",
    "proj4": "^2.5.0",
    "prop-types": "^15.7.2",
    "rc-tooltip": "^3.7.3",
    "react": "^16.4.2",
    "react-dom": "^16.9.0",
    "react-loader-spinner": "^2.3.0",
    "react-redux": "^5.0.7",
    "react-router-dom": "^5.0.0",
    "react-slick": "^0.23.2",
    "react-stripe-elements": "^4.0.0",
    "react-test-renderer": "^16.8.1",
    "redux": "^4.0.0",
    "redux-actions": "^2.6.1",
    "redux-auth-wrapper": "^2.1.0",
    "redux-devtools-extension": "^2.13.5",
    "redux-immutable": "^4.0.0",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0"
  },
  "devDependencies": {
    "babel-preset-env": "^1.7.0",
    "enzyme": "^3.8.0",
    "enzyme-adapter-react-16": "^1.9.1",
    "enzyme-to-json": "^3.3.5",
    "jsdom": "^13.2.0",
    "jsdom-global": "^3.0.2",
    "react-scripts": "2.1.8",
    "redux-mock-store": "^1.5.3"
  },
  "resolutions": {
    "**/**/fsevents": "^1.2.9"
  },

为什么它会在两台机器上安装不同?!

【问题讨论】:

    标签: javascript reactjs material-ui yarnpkg


    【解决方案1】:

    不需要明确拉入 @material-ui/styles(如 Davin 的回答所示)。事实上,在你的package.jsoncan lead to problems 中明确包含该包,因为它不止一次地被拉入你的包中。

    来自https://material-ui.com/blog/september-2019-update/

    从 v4.5.1 开始,文档尽可能地提到了@material-ui/core/styles。

    此更改无需直接安装 @material-ui/styles 包。它可以防止 @material-ui/styles 在包中重复并避免混淆。

    另见https://material-ui.com/styles/basics/#material-ui-core-styles-vs-material-ui-styles

    您的导入问题在于:

    import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
    

    代替:

    import {MuiThemeProvider} from "@material-ui/core/styles";
    

    只有当MuiThemeProvider@material-ui/core/styles 中的单独文件或目录时,第一个才有效,但事实并非如此。第二种语法用于从@material-ui/core/styles 命名导出,即what it is

    【讨论】:

    • 啊,所以基本上<MuiThemeProvider /> 只是< ThemeProvider /> 的别名,当我看到这个可用时我摸不着头脑,但材料-UI 示例只提到<ThemeProvider /> 所以很困惑。猜猜它会帮助那些希望它更具体的人。
    • @ShaungCheng MuiThemeProvider 是它在 v3 中的唯一名称。为了向后兼容,别名保留在 v4 中。
    【解决方案2】:

    看起来你需要引入另一个包:@material-ui/styles。然后,您可以使用ThemeProvider 组件来设置主题as described here

    import { createMuiTheme } from '@material-ui/core/styles';
    import { ThemeProvider } from '@material-ui/styles';
    
    const theme = createMuiTheme({
        ...
    })
    
    ...
        <ThemeProvider theme={theme}>
          <MyChild />
        </ThemeProvider>
    ...
    

    【讨论】:

      【解决方案3】:

      您应该使用新库:@mui/material/ 是的,v5 已经发布! 检查:Migration from v4 to v5

      例如,这是我的应用程序

      import { ThemeProvider, createTheme } from '@mui/material/styles'
      
      const theme = createTheme({
        palette: {
          primary: {
            main: '#1476A3',
          },
          secondary: {
            main: '#292977',
          },
        },
        typography: {
          fontFamily: ['Roboto', 'sans-serif'].join(','),
        },
        components: {
          MuiPaper: {
            styleOverrides: {
              rounded: {
                borderRadius: '12px',
              },
            },
          },
          MuiButton: {
            styleOverrides: {
              root: {
                borderRadius: '8px',
              },
            },
          },
        },
      })
      
      const App = ({ children }) => (
        <main>
          <ThemeProvider theme={theme}>{children}</ThemeProvider>
        </main>
      )
      
      export default App
      
      

      【讨论】:

        猜你喜欢
        • 2021-10-24
        • 1970-01-01
        • 2018-02-19
        • 2021-03-19
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        相关资源
        最近更新 更多