账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    antd组件样式局部加载,用react-app-rewired插件应该怎么配置?
    20
    0

    package.json配置:

    {
      "name": "hawerblog",
      "version": "0.1.0",
      "private": true,
      "dependencies": {
        "antd": "^3.15.0",
        "babel-plugin-import": "^1.11.0",
        "customize-cra": "^0.2.12",
        "less": "^3.9.0",
        "less-loader": "^4.1.0",
        "react": "^16.8.4",
        "react-app-rewire-define-plugin": "^1.0.0",
        "react-app-rewire-less": "^2.1.3",
        "react-app-rewired": "^2.1.1",
        "react-dom": "^16.8.4",
        "react-router-dom": "^4.4.0",
        "react-scripts": "2.1.8",
        "webpack-merge": "^4.2.1"
      },
      "scripts": {
        "start": "set PORT=4000 && react-app-rewired start",
        "build": "react-app-rewired build",
        "test": "react-app-rewired test",
        "eject": "react-scripts eject"
      },
      "eslintConfig": {
        "extends": "react-app"
      },
      "browserslist": [
        ">0.2%",
        "not dead",
        "not ie <= 11",
        "not op_mini all"
      ]
    }

    想实现的目标效果:

    import React, { Component } from 'react'
    import 'antd/dist/antd.css'
    import { Button } from 'antd'
    
    import { BrowserRouter as Router, Route, Link } from 'react-router-dom'
    
    import './styles/main.less'
    
    import routes from './routers'
    
    import Banner from './components/banner'
    
    class App extends Component {
      render () {
        return (
          <div className='App'>
            <Button type='primary'>
              Primary
            </Button>
            <Banner/>
            <Router>
              <header className='title'>
                {routes.map((r, key) => {
                   if (r.text) {
                     return <Link key={key} to={r.path}>
                            {r.text}
                            </Link>
                   }
                 })}
              </header>
              {routes.map((route, key) => {
                 if (route.exact) {
                   return <Route
                            key={key}
                            exact
                            path={route.path}
                            render={props => (
                                      <route.component {...props} routes={route.routes} />
                                    )} />
                 }else {
                   return <Route key={key} path={route.path} render={props => (
                                                            <route.component {...props} routes={route.routes} />
                                                          )} />
                 }
               })}
            </Router>
          </div>
        )
      }
    }
    
    export default App
    

    直接引入下面这句,样式就有了,不需要全局引入完整的antd样式,查阅资料我选用的是react-app-rewired方案

    import { Button } from 'antd'

    config-overrides.js 配置如下

    const {
      override,
      fixBabelImports,
      addLessLoader,
      addBabelPlugin
    } = require('customize-cra')
    const path = require('path')
    const merge = require('webpack-merge')
    
    const rewireLess = require('react-app-rewire-less')
    const rewireDefinePlugin = require('react-app-rewire-define-plugin')
    
    override(
      fixBabelImports('import', {
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: true
      }),
      addLessLoader({
        javascriptEnabled: true,
        modifyVars: { '@primary-color': '#1DA57A' }
      })
    )
    
    module.exports = function override(config, env) {
      config.resolve = {
        ...config.resolve,
        alias: { '@': path.resolve(__dirname, 'src') }
      }
      config.module.rules.push({ test: /\.less$/ }, { test: /\.css$/ })
      return config
    }
    

    现在是不知道怎么样才能排除对应css/less 的node_modules引用

    各位朋友走过路过给个思路谢谢!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 自杀前夜 普通会员 1楼

      在React应用中,你可以在应用的root文件中使用react-app-rewired插件来设置组件的样式局部加载。这个插件会自动重新加载组件,从而允许你使用默认的组件样式。

      以下是配置react-app-rewired的步骤:

      1. 首先,你需要在你的项目中安装react-app-rewired。你可以使用npm来安装:

      npm install react-app-rewired

      1. 然后,在你的root文件(例如App.js)中导入Rewired组件:

      jsx import React from 'react'; import Rewired from 'react-app-rewired'; import './App.css';

      然后,你可以使用Rewired来设置组件的样式局部加载:

      ```jsx import Rewired from 'react-app-rewired'; import App from './App';

      Rewired.use(reload => ({ reset: () => { window.location.reload(); }, }));

      ReactDOM.render(, document.getElementById('root')); ```

      在这个例子中,我们使用use钩子来定义一个reset函数,这个函数会在组件重新加载时被调用。reset函数会将浏览器的location对象重置为null,从而导致浏览器重定向到初始的页面。

      注意:react-app-rewired插件的使用可能会导致一些浏览器兼容性问题。因此,你应该在开发环境中的浏览器上测试你的应用。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部