- 第三方工具
- 10.ui库之按需加载
- react-scripts-rewired 和 customize-cra 来自定义 create-react-app 的 webpack 配置。">一、使用 react-scripts-rewired 和 customize-cra 来自定义 create-react-app 的 webpack 配置。
- 代理(服务器之间是没有跨域的)
- 更改端口(port)
- eslint
- 网站:
- cnpm i react-markdown -S
第三方工具
yarn 和 npm的命令对比表格
1. vscode 安装es7插件: ES7 React/Redux/React-Native/JS snippets2. 项目依赖: npm install --save prop-types(让props具有数据类型约束。js是弱语言,没有数据类型的概念)1. 数据请求:cnpm i axios -S2. cnpm i json-server -g(Mac需要前面加sudo) - mock数据的工具(构建前端Mock)-模拟api使用方法:<div>在根目录下建一个mock文件夹,里面放的都是json文件,新开控制台,cd到mock,执行json-server your-data.json --port 4000 --watch --host 192.168.0.103。就会得到一个假的api(默认端口是3000,若冲突,则--port(简写-p)修改;-w,实时监控,修改json数据不用重启--host默认是localhost,这里是指定host)<b>json文件的格式一定要正确</b>使用说明地址:https://gitee.com/rh_hg/json-server?from=gitee_search</div>*帮你自动解决跨域问题;*其中同一个api,不同方式请求,执行不同的事情-Restful风格:https://blog.csdn.net/zalan01408980/article/details/841462493. cnpm i swiper-S 轮播图插件 myswiper(实例名).update()方法用于更新4. cnpm i pubsub-js -S非父子组件传值发布/触发:PubSub.publish("事件名","数据");订阅/监听:PubSub.subscribe("事件名",(msg,data)=>{//msg是事件名,data是传过来的参数})<sass/scss> node-sass这个包不好装-不要着急5. cnpm i node-sass sass-loader -S 或 yarn add node-sass sass-loader6. 矢量图标库,先去下载,放在public。再在index.html中引入iconfont.css。一般在span标签写className就可以啦
7.背景粒子 react-particles.js两个网址
8.cnpm i redux react-redux -S - 详情见redux.md
10.ui库之按需加载
ant design mobile (mobile)
ant design (pc) yarn add antd
全局引入
index.js
import ‘antd/dist/antd.css’;
在组件里引入组件就可以使用了,例如组件里使用button
import { Button } from ‘antd’;
xxx
一、使用 react-scripts-rewired 和 customize-cra 来自定义 create-react-app 的 webpack 配置。
- 代码
按需加载1) yarn add react-app-rewired customize-crareact-app-rewired 不用弹射就可以配置webpackcustomize-cra 自定义脚手架环境2) package.json...."scripts": {"start": "react-app-rewired start","build": "react-app-rewired build","test": "react-app-rewired test","eject": "react-scripts eject"},...
项目的根目录建立一个配置文件 config-overrides.js
// less less-loader// yarn add babel-plugin-import// @babel/plugin-proposal-decoratorsconst { override, fixBabelImports, addLessLoader, addWebpackAlias, addDecoratorsLegacy } = require('customize-cra');const { resolve } = require('path');module.exports = override(// 按需加载fixBabelImports('import', {libraryName: 'antd',libraryDirectory: 'es',style: true}),// less覆盖主题: 不需要全局导入样式`import 'antd/dist/antd.css';`addLessLoader({// 写法一: 5.0.0javascriptEnabled: true,modifyVars: {'@primary-color': '#1DA57A'},// 写法二: less-loader 版本为 6.0.0 以上// lessOptions: {// javascriptEnabled: true,// modifyVars: {// '@primary-color': '#1DA57A'// }// }}),// 别名addWebpackAlias({'@': resolve('src')}),// 装饰器addDecoratorsLegacy(),);
安装依赖次序
1) antd
2)react-app-rewired customize-cra
3) babel-plugin-import
4)less less-loader 如果需要更改主题
5) @babel/plugin-proposal-decorators 是为了用装饰器配置代理 src/setupProxy.jshttp-proxy-middleware ```javascript const { createProxyMiddleware } = require(‘http-proxy-middleware’)
module.exports = function (app) { // 接口网址: https://cnodejs.org/api app.use(‘/cnode’, createProxyMiddleware({ target: ‘https://cnodejs.org/api/v1‘, changeOrigin: true, pathRewrite: { “^/cnode”: “/“ } }) ); }
<a name="GXrui"></a>#### 二、[craco](https://github.com/gsoft-inc/craco) (一个对 create-react-app 进行自定义配置的社区解决方案)[github-craco](https://github.com/gsoft-inc/craco)<br />[使用readme](https://github.com/gsoft-inc/craco/blob/master/packages/craco/README.md#custom-location-for-cracoconfigjs)```javascript$ yarn add @craco/craco$ yarn add craco-less/* package.json */"scripts": {- "start": "react-scripts start",- "build": "react-scripts build",- "test": "react-scripts test",+ "start": "craco start",+ "build": "craco build",+ "test": "craco test",}/* 根目录下:craco.config.js */module.exports = {// ...};// 自定义主题: App.css改为less并引入antd的less/* src/App.js */- import './App.css';+ import './App.less';/* src/App.less */- @import '~antd/dist/antd.css';+ @import '~antd/dist/antd.less';const CracoLessPlugin = require('craco-less');// 添加插件module.exports = {plugins: [{plugin: CracoLessPlugin,options: {lessLoaderOptions: {// 利用了 less-loader 的 modifyVars 来进行主题配置. [配置主题文档](https://ant-design.gitee.io/docs/react/customize-theme-cn)modifyVars: { '@primary-color': '#1DA57A' },javascriptEnabled: true,},},},],};

代理(服务器之间是没有跨域的)
1.正向代理(Forward agent)-开发环境-(react采用webpack-dev-server)
通过代理服务器去访问,类似于梯子访问谷歌
2.反向代理(reverse proxy)-上线环境-(nginx代理)
这个服务器没有,去向别的服务器请求
3.配置文件的路径
项目目录下\node_modules\react-scripts\config\webpackDevServer.config.js
或者弹射显示隐藏文件在根目录(yarn eject)
4.配置
进入这个文件,找到proxy这个属性,对其进行修改
1.正向代理//中国天气网(城市码101200901-宜昌)//api http://www.weather.com.cn/data/cityinfo/101200901.htmlaxios.get("/weather/data/cityinfo/101200901.html").then(res=>{})proxy:{"/weather":{target:"http://www.weather.com.cn",changeOrigin:true,"pathRewrite":{"^/weather":"/"}},},2.反向代理nginx写代理
更改端口(port)
脚手架(webpack)自带的服务器是webpack-dev-server
项目目录下\node_modules\react-scripts\scripts\start.js
改端口 const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 5000;
这样更改,一旦重新下载node_modules则失效。最靠谱的办法是弹射,但是弹射有几率失败
注意: 弹射不能撤销
查看package.json发现脚本是react-scripts执行的,去node_modules/react-scripts修改配置文件没有意义,因为node_modules不能改,改了重新建辉丢失配置。所以弹射来了↓↓↓
yarn eject 弹射隐藏文件显示在根目录(弹出来藏不回去,不可撤销); 弹射过程中(会下插件帮助弹射)若出错,则直接删去node_modules,再反向安装依赖,若启动项目成功,则说明弹射成功!
eslint
- eslint no-restricted-globals
// eslint-disable-next-line
下面这句js 就不用eslint进行语法检查了。
react cli eslint 配置
https://www.codercto.com/a/13256.html - Fragment 空标记 相当于 <></>
网站:
cnpm i react-loadable redux-thunk redux-saga classnames styled-components immutable -S
