当前位置: 首页 > news >正文

【React】脚手架进阶

目录

  • 暴露webpack配置
  • package.json的变化
  • 修改webpack.config.js
    • 配置less
    • 修改域名、端口号
    • 浏览器兼容处理
    • 处理跨域

暴露webpack配置

react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eject属性

 "scripts": {"eject": "react-scripts eject"},

执行下面命令

yarn run eject

之后会有以下的提示,表示react-scripts eject是不可逆的。
在这里插入图片描述
随后又会有其他提示:
在这里插入图片描述
意思是当前的 Git 仓库中存在未跟踪的文件(untracked files)或未提交的更改(uncommitted changes)。初始化一个本地git仓库,提交本地修改记录

git init
git add .
git commit -m 'Update'

随后再次执行yarn run eject命令,最后会把配置文件暴露出来,如下:
在这里插入图片描述

package.json的变化

package.json中会安装很多依赖,会把打包所需要的依赖都重新安装一遍。
在这里插入图片描述
其中babel-preset-react-app是对@babel/preset-env(ES6转ES5)语法包的重写,目的是让语法包可以识别React语法,实现代码转换。

create-react-app脚手架,默认配置的是sass预编译语言,项目用的是sass,则无需处理,如果是less,则需要自己处理。

另外不在用react-scripts封装的插件去执行命令,直接基于node,去执行对应入口的文件,eject命令没有了。如下:

  "scripts": {"start": "node scripts/start.js","build": "node scripts/build.js","test": "node scripts/test.js"},

下面的配置,类似于babel.config.js对babel-loader的额外配置

  "babel": {"presets": ["react-app"]}

修改webpack.config.js

配置less

当我们使用less时候,需要进行以下修改:

yarn add less less-loader@8 # 新版本的 less-loader 兼容性不好

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改域名、端口号

可以在 scripts/start.js 文件中修改:

const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000; // 可修改端口号
const HOST = process.env.HOST || '0.0.0.0'; // 可修改 IP(或域名)

在这里插入图片描述
如果要基于环境变量修改,则安装cross-env插件

yarn add cross-env -D
// 修改前
"scripts": {"start": "node scripts/start.js",...
},
// 修改后
"scripts": {"start": "cross-env PORT=8080 node scripts/start.js",...
},

浏览器兼容处理

浏览器兼容需要在package.json中的browserslist设置,如下:

 "browserslist": {"production": [">0.2%","not dead","not op_mini all"],"development": ["last 1 chrome version","last 1 firefox version","last 1 safari version"]},

但是只能解决两个问题:
1.对postcss-loader生效:控制CSS3前缀
2.对babel-loader生效:控制ES6的转换

无法解决ES6内置API的兼容,常见解决办法就是使用@babel/polyfill(对常见内置的API重写),可以yarn add @babel/polyfill,然后在入口import "@babel/polyfill" ,但是React的脚手架默认带了react-app-polyfill(对@babel/polyfill重写),只需要在入口文件引入:

// 对 ES6 内置 API 的兼容性处理
import 'react-app-polyfill/ie9'
import 'react-app-polyfill/ie11'
import 'react-app-polyfill/stable'

create-react-app 脚手架中,使用了 react-app-polyfill 来替代 @babel/polyfill,因为它提供了对 IE9、IE11 和最新稳定版本的兼容性,并且可以显式地进行按需导入。其具体的作用如下:

  • import 'react-app-polyfill/ie9':为 IE9 及以下版本提供 JavaScript 环境的 polyfill。
  • import 'react-app-polyfill/ie11':为 IE11 提供必要的 polyfill。
  • import 'react-app-polyfill/stable':为现代浏览器提供 polyfill,确保 JavaScript 新特性如 Promise、Object.assign 等可用。

为什么重写 @babel/polyfill 为 react-app-polyfill?
兼容性: react-app-polyfill已经专门为 React 项目优化,能更好地适配 React 的工作方式,尤其是在处理旧版浏览器时的表现。
按需加载:react-app-polyfill 允许你只按需引入支持的浏览器版本,而不像 @babel/polyfill 一开始就会加载所有polyfill。

处理跨域

在src目录中,新建setupProxy.js文件,安装http-proxy-middleware,它是专门实现跨域的,webpack-dev-server的跨域原理也是基于它完成的

yarn add http-proxy-middleware

比如以下案例:

const { createProxyMiddleware } = require("http-proxy-middleware")
module.exports = function (app){app.use(createProxyMiddleware("jian",{target:"https://www.jiashu.com/asimov",changeOrign:true,ws:true,pathRewrite:{"^/jian":""}}))
}

相关文章:

【React】脚手架进阶

目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eje…...

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框,默认哪项选中,判断当前选中哪一项,让哪项选中,得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…...

如何移除git中被跟踪的commit文件

忽略已被跟踪的文件 问题描述 如果某个文件已经被 Git 跟踪(即已被提交到仓库),即使后来将其添加到 .gitignore 文件中,Git 仍会继续跟踪它。 解决方案 更新 .gitignore 文件 将需要忽略的文件加入 .gitignore: .env…...

结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)

一 night compute分析 将cublas作为base line和现有的代码分析 图1.1 可以发现计算吞吐量明显偏低,能想到的就是计算单元处于空闲的概率较大,是访存密集型算子,因此可以增大数据的吞吐量,多给计算单元提供数据 二 代码 #include "common.h"//mma计算的基本尺…...

Docker 部署 Typecho

1. 官网 https://typecho.org/插件 & 主题 https://github.com/typecho-fans/plugins https://typechx.com/ https://typecho.work/2. 通过 compose 文件安装 github官网: https://github.com/typecho/Dockerfile 新建一个目录,存放 typecho 的相…...

【大数据】机器学习-----模型的评估方法

一、评估方法 留出法(Holdout Method): 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。优点&…...

【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空

在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误&#xff…...

FPGA EDA软件的位流验证

位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…...

信号与系统初识---信号的分类

文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了,但是只写了一篇博客,其实主要是因为最近在打这个华数杯,其次是因为在补这个数学知识…...

信号量机制之苹果-橘子问题

桌上有一空盘,允许存放一种水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用。 要求:请用信号量机制实现爸爸、儿子、女儿三个并发…...

三相无刷电机控制|FOC理论04 - 克拉克变换 + 帕克变换的最终目标

导言 通过坐标系旋转,将电机中复杂的三相交流信号映射到与转子磁场同步的旋转参考系中,将动态问题转化为静态问题。这种方法的优点在于: 简化了控制逻辑。实现了转矩Iq和磁通Id的解耦。提供了直流量控制的可能性,大大提高了控制效…...

Nacos: 一个动态服务发现与配置管理平台

Nacos: 一个动态服务发现与配置管理平台 引言 在微服务架构日益普及的今天,服务之间的调用和配置管理变得越来越复杂。为了简化这一过程并提高开发效率,阿里巴巴推出了Nacos——一个易于使用的动态服务发现、配置管理和服务管理平台。 Nacos是什么&am…...

认识机器学习中的结构风险最小化准则

上一篇文章我们学习了关于经验风险最小化准则,其核心思想是通过最小化训练数据上的损失函数来优化模型参数,从而提高模型在训练集上的表现。但是这也会导致一个问题,经验风险最小化原则很容易导致模型在训练集上错误率很低,但在未…...

计算机网络 (35)TCP报文段的首部格式

前言 计算机网络中的TCP(传输控制协议)报文段的首部格式是TCP协议的核心组成部分,它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中,首部包含了控制TCP连接的各种字段&#xff…...

ubuntu24.04安装docker显卡工具包nvidia-container-toolkit

问题描述 docker 容器启动时如果需要访问 gpu ,需要安装 nvidia-container-toolkit 才行,否则会提示如下错误 sudo docker run --rm -it --gpus all ubuntu:latest docker: Error response from daemon: could not select device driver "" …...

rknn环境搭建之docker篇

目录 1. rknn简介2. 环境搭建2.1 下载 RKNN-Toolkit2 仓库2.2 下载 RKNN Model Zoo 仓库2.3 下载交叉编译器2.4 下载Docker镜像2.5 下载ndk2.5 加载docker镜像2.6 docker run 命令创建并运行 RKNN Toolkit2 容器2.7 安装cmake 3. 模型转换3.1 下载模型3.2 模型转换 4. 编译cdem…...

OpenCV相机标定与3D重建(56)估计物体姿态(即旋转和平移)的函数solvePnPRansac()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用RANSAC方案从3D-2D点对应关系中找到物体的姿态。 cv::solvePnPRansac 是 OpenCV 中用于估计物体姿态(即旋转和平移)的…...

vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。

1.创建countdown.vue文件&#xff1a; <template><p style"font-size: 10px">{{time}}</p> </template> <script>export default{data () {return {time : ,flag : false}},mounted () {let time setInterval(() > {if (this.fla…...

缩放 对内外参的影响

当你对图像进行同比例缩小时&#xff0c;图像的内参需要相应地变化&#xff0c;但外参通常保持不变。 相机内参 相机内参&#xff08;内参矩阵&#xff09;描述了相机的固有属性&#xff0c;包括焦距和主点&#xff08;光轴与图像平面的交点&#xff09;的坐标。 当你对图像…...

SQL面试题2:留存率问题

引言 场景介绍&#xff1a; 在互联网产品运营中&#xff0c;用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标&#xff0c;直接影响产品的可持续发展和商业价值。通过分析这些数据&#xff0c;企业可以了解用户行为&#xff0c;优化产品策略&#xff0c;提升用户体验…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...