Ant Design of React—第二节

来源:互联网 发布:linux如何查看文件权限 编辑:程序博客网 时间:2024/06/05 00:12

在 create-react-app 中使用

create-react-app 是业界最优秀的 React 应用开发工具之一,本文会尝试在 create-react-app 创建的工程中使用 antd 组件,并自定义 webpack 的配置以满足各类工程化需求。

  • 安装和初始化
  • 引入 antd
  • 高级配置
  • eject
  • 源码和其他脚手架

安装和初始化#

我们需要在命令行中安装 create-react-app 工具,你可能还需要安装 yarn。

$ npm install -g create-react-app yarn

然后新建一个项目。

$ create-react-app antd-demo

工具会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请尝试配置代理或使用其他 npm registry。

然后我们进入项目并启动。

$ cd antd-demo$ yarn start

此时浏览器会访问 http://localhost:3000/ ,看到 Welcome to React 的界面就算成功了。

引入 antd#

这是 create-react-app 生成的默认目录结构。

├── README.md├── package.json├── public│   ├── favicon.ico│   └── index.html├── src│   ├── App.css│   ├── App.js│   ├── App.test.js│   ├── index.css│   ├── index.js│   └── logo.svg└── yarn.lock

现在从 yarn 或 npm 安装并引入 antd。

$ yarn add antd

修改 src/App.js,引入 antd 的按钮组件。

import React, { Component } from 'react';import Button from 'antd/lib/button';import './App.css';class App extends Component {  render() {    return (      <div className="App">        <Button type="primary">Button</Button>      </div>    );  }}export default App;

修改 src/App.css,在文件顶部引入 antd/dist/antd.css

@import '~antd/dist/antd.css';.App {  text-align: center;}...

好了,现在你应该能看到页面上已经有了 antd 的蓝色按钮组件,接下来就可以继续选用其他组件开发应用了。其他开发流程你可以参考 create-react-app 的官方文档。

高级配置#

我们现在已经把组件成功运行起来了,但是在实际开发过程中还有很多问题,例如上面的例子实际上加载了全部的 antd 组件的样式(对前端性能是个隐患)。

此时我们需要对 create-react-app 的默认配置进行自定义,这里我们使用 react-app-rewired (一个对 create-react-app 进行自定义配置的社区解决方案)。

引入 react-app-rewired 并修改 package.json 里的启动配置。

$ yarn add react-app-rewired --dev
/* 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-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件(原理),现在我们尝试安装它并修改 config-overrides.js文件。

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

然后移除前面在 src/App.css 里全量添加的 @import '~antd/dist/antd.css'; 样式代码,并且按下面的格式引入模块。

  // src/App.js  import React, { Component } from 'react';- import Button from 'antd/lib/button';+ import { Button } from 'antd';  import './App.css';  class App extends Component {    render() {      return (        <div className="App">          <Button type="primary">Button</Button>        </div>      );    }  }  export default App;

最后重启 yarn start 访问页面,antd 组件的 js 和 css 代码都会按需加载,你在控制台也不会看到这样的警告信息。关于按需加载的原理和其他方式可以阅读这里。

自定义主题#

按照 配置主题 的要求,自定义主题需要用到 less 变量覆盖功能。我们可以引入 react-app-rewire 的 less 插件 react-app-rewire-less 来帮助加载 less 样式,同时修改 config-overrides.js 文件。

$ yarn add react-app-rewire-less --dev
  const { injectBabelPlugin } = require('react-app-rewired');+ const rewireLess = require('react-app-rewire-less');  module.exports = function override(config, env) {-   config = injectBabelPlugin(['import', { libraryName: 'antd', style: 'css' }], config);+   config = injectBabelPlugin(['import', { libraryName: 'antd', style: true }], config);+   config = rewireLess.withLoaderOptions({+     modifyVars: { "@primary-color": "#1DA57A" },+   })(config, env);    return config;  };

这里利用了 less-loader 的 modifyVars 来进行主题配置, 变量和其他配置方式可以参考 配置主题 文档。

修改后重启 yarn start,如果看到一个绿色的按钮就说明配置成功了。

eject#

你也可以使用 create-react-app 提供的 yarn run eject 命令将所有内建的配置暴露出来。不过这种配置方式需要你自行探索,不在本文讨论范围内。

源码和其他脚手架#

以上是在 create-react-app 中使用 antd 的相关实践,你也可以借鉴此文的做法在自己的 webpack 工作流中使用 antd,更多 webpack 配置可参考 atool-build。(例如加入 moment noParse 避免加载所有语言文件)

React 生态圈中还有很多优秀的脚手架,使用它们并引入 antd 时,你可能会遇到一些问题,下面是一些著名脚手架使用 antd 的范例,包括本文的 create-react-app。

  • react-boilerplate/react-boilerplate

  • kriasoft/react-starter-kit

  • create-react-app-antd

  • cra-ts-antd

  • next.js

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人生太多无奈与心酸 心醉 我心醉自然 心醉神迷 心醉歌曲 心醉歌词 两个人心醉过一个人不洒脱 春风吹人心醉 大唐超市 尘心醉 心醉醉梦飞飞是什么歌 心醉醉梦醉醉是什么歌 美得令人心醉的宋词 爱你是我一生的承诺 竹心醉 水浒之王族霸业 爱在心醉 心锁歌曲 嫡锁君心 嫡锁君心免费阅读全文 锁心 心锁原唱 心锁歌曲原唱 心锁歌词 锁心图片 还珠之晴锁君心 嫡锁君心全文免阅 心锁图片 歌曲心锁 心锁在线试听 换锁心怎么换 换锁心一般多少钱 美心防盗门换锁芯 锁心 灵镜传奇同人 防盗门换锁心要多少钱 锁心一般换一下多少钱 锁你锁心孙伯纶 锁心多少钱 心锁歌曲冷漠 换个锁心多少钱 换个锁心要多少钱 玉佛心锁 封心锁爱是什么意思 鲁班锁 心锁