- 第三方工具
- 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 snippets
2. 项目依赖: npm install --save prop-types(让props具有数据类型约束。js是弱语言,没有数据类型的概念)
1. 数据请求:
cnpm i axios -S
2. 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/84146249
3. 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-loader
6. 矢量图标库,先去下载,放在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-cra
react-app-rewired 不用弹射就可以配置webpack
customize-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-decorators
const { 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.0
javascriptEnabled: 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)
通过代理服务器去访问,类似于梯子访问谷歌![](https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3892108125,900014847&fm=26&gp=0.jpg#align=left&display=inline&height=293&margin=%5Bobject%20Object%5D&originHeight=293&originWidth=594&status=done&style=none&width=594)
2.反向代理(reverse proxy)-上线环境-(nginx代理)
这个服务器没有,去向别的服务器请求![](https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=4070354397,1810838386&fm=26&gp=0.jpg#align=left&display=inline&height=300&margin=%5Bobject%20Object%5D&originHeight=300&originWidth=518&status=done&style=none&width=518)
3.配置文件的路径
项目目录下\node_modules\react-scripts\config\webpackDevServer.config.js
或者弹射显示隐藏文件在根目录(yarn eject)
4.配置
进入这个文件,找到proxy这个属性,对其进行修改
1.正向代理
//中国天气网(城市码101200901-宜昌)
//api http://www.weather.com.cn/data/cityinfo/101200901.html
axios.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