美文网首页JavaScript
create-react-app中按需引入Ant-Design

create-react-app中按需引入Ant-Design

作者: 于晓俞 | 来源:发表于2018-02-02 21:24 被阅读3149次

    先来回顾一下create-react-app脚手架创建项目的方法

    //安装create-react-app脚手架
    npm i create-react-app -g
    //创建项目
    create-react-app antd-demo
    //启动项目
    npm start
    
    安装Ant-Design
    npm i antd -S
    
    按需引入Ant-Design插件

    这里需要用到两个插件
    一、
    react-app-rewired(一个对 create-react-app 进行自定义配置的社区解决方案)。

    npm i react-app-rewired -D
    

    然后更改一下package.json,这里有个坑,我们用create-react-app安装出来的package.json并不是都是使用react-scripts start这种方式,还有node scripts/start.js这种方式的,在第二种方式下这种更改就会出现问题,目前我还没有想到解决的方法,目前建议就是多试几次,尴尬😅。

    /* package.json */
    "scripts": {
    -   "start": "react-scripts start",
    +   "start": "react-app-rewired start",
    -   "build": "react-scripts build",
    +   "build": "react-app-rewired build",
    -   "test": "react-scripts test --env=jsdom",
    +   "test": "react-app-rewired test --env=jsdom",
    }
    
    

    然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。

    module.exports = function override(config, env) {
      // do stuff with the webpack config...
      return config;
    };
    

    二、
    babel-plugin-import (一个用于按需加载组件代码和样式的 babel 插件)。

    npm i babel-plugin-import -D
    

    修改 config-overrides.js 文件。

    const { injectBabelPlugin } = require('react-app-rewired');
    
      module.exports = function override(config, env) {
       config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);
        return config;
      };
    
    

    经过上面两部的操作,我们的antd的按需引入就设置好了。

    在组件中使用时,方法如下

    import React, { Component } from 'react';
    import ReactDOM from 'react-dom';
    //如下方式进行引入,这样就会按需引入所需的js和css了
    import { Button, Icon, Row, Col } from 'antd';
    import './index.css';
    import registerServiceWorker from './registerServiceWorker';
    
    class App extends Component {
        render() {
            return (
                <div className="App">
                    button<Button type="primary">Button</Button><br />
                    icon<Icon type="link" /><br />
                    <div className="grid">
                        <Row className="row">
                            <Col className="col" span={12}>col-12</Col>
                            <Col className="col" span={12}>col-12</Col>
                        </Row>
                        <Row className="row">
                            <Col className="col" span={8}>col-8</Col>
                            <Col className="col" span={8}>col-8</Col>
                            <Col className="col" span={8}>col-8</Col>
                        </Row>
                        <Row className="row">
                            <Col className="col" span={6}>col-6</Col>
                            <Col className="col" span={6}>col-6</Col>
                            <Col className="col" span={6}>col-6</Col>
                            <Col className="col" span={6}>col-6</Col>
                        </Row>
                    </div>
                </div>
            );
        }
    }
    
    ReactDOM.render(<App />, document.getElementById('root'));
    registerServiceWorker();
    
    

    上面引用了antd的三个组件,按钮、icon和栅格。效果如下


    相关文章

      网友评论

      • hesisi:谢谢,可以了~~可能是我执行了npm run eject的原因
      • hesisi:你好,您的方法为什么打开还是没有样式?而且我关掉之后,重新执行npm start居然报错了:Cannot find module 'react-scripts/package.json',请问这是什么原因?
      • 16d88a768a2a:我的 scripts 就是第二种方式啊,试了几次react-app-rewired 也没有加进去,,现在就是页面上的ant css貌似没有引进来
        16d88a768a2a:@于晓俞 如何给你发图呢,就是 node 文件那种
        于晓俞:@124555 create react app创建项目之后 先不要npm i 去看下配置文件是什么样子的 我当时就是没装模块时候去修改的配置 可以先尝试下

      本文标题:create-react-app中按需引入Ant-Design

      本文链接:https://www.haomeiwen.com/subject/cjtyzxtx.html