react初始化配置rem,less,@,本地代理,通配符,视口单位等

news2024/9/24 17:14:56

初始化项目之后,项目配置中默认配置的是scss 想用less就需要单独配置了,在做一个完整的项目情况下create-react-app搭出来架子的配置往往是不够的至少需要简单配置以下信息
暴露webpack之后会增加很多文件和依赖配置,有些时候并不想把它暴露出来,所以下边分两种情况对项目进行配置。
1:不暴露webpack配置情况下,给项目配置Less, 并配置@publicPath 先下载依赖

	"@craco/craco": "^7.1.0",
	"craco-less": "^2.0.0",

在项目根目录创建 craco.config.js

	const CracoLessPlugin = require("craco-less");
	const path = require('path')
	module.exports = {
	  webpack: {
	    alias: {
	      '@': path.join(__dirname, 'src')
	    }
	  },
	  plugins: [
	    {
	      plugin: CracoLessPlugin,
	      options: {
	        lessLoaderOptions: {
	          lessOptions: {
	            modifyVars: { "@primary-color": "#1DA57A" },
	            javascriptEnabled: true
	          }
	        }
	      }
	    }
	  ],
	  babel: {
	    plugins: [["@babel/plugin-proposal-decorators", { legacy: true }]]
	  }
	}

修改启动命令

	  "scripts": {
	    "start": "craco start",
	    "build": "craco build",
	    "test": "craco test",
	  }

配置项目代理

	npm i http-proxy-middleware
	// https://www.npmjs.com/package/http-proxy-middleware

在src目录下创建 setupProxy.js

	const { createProxyMiddleware } = require('http-proxy-middleware')
	const target = 'http://59.207.42.250:30027';
	module.exports = function (app) {
	    app.use(
	        '/api',
	        createProxyMiddleware({
	            target : target,
	            changeOrigin : true,  // 设置跨域请求
	            // PathRewrite : {
	            //     '^/api' : '' // 将/api 变为 ''
	            // }
	        })
	    );
	}

2:暴露webpack配置
注意:此步骤不可逆 ,最好备份下项目再进行。

	git add .
	git commit -m '暴露项目配置项'
	npm run eject
	// 若eject报错,看是否有未提交的文件,查看scripts命令配置是否是
	"scripts": {
	    "eject": "react-scripts eject"
	}

执行完之后配置less: 在项目根目录下会找到 config 文件夹,找到里面的 webpack.config.js 搜索 const sassRegex = /.(scss|sass)$/ 在第73行左右加入红框内容
在这里插入图片描述

	const lessRegex = /\.less$/; 
	const lessModuleRegex = /\.module\.less$/;

在当前文件中再搜索oneOf,大约在360行左右
在这里插入图片描述
在oneOf数组中添加以下代码:

	 {
            test: lessRegex,
            exclude: lessModuleRegex,
            use: getStyleLoaders(
                {
                importLoaders: 2,
                sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                },
                "less-loader"
            ),
            sideEffects: true,
        },
        {
            test: lessModuleRegex,
            use: getStyleLoaders(
                {
                importLoaders: 2,
                sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                    modules: {
                        getLocalIdent: getCSSModuleLocalIdent,
                    },
                },
                "less-loader"
            ),
        },
      

在本文件中继续搜索alias: 大约在320行左右
在这里插入图片描述插入红框内容

	'@': path.resolve('src')

以上配置完之后项目基本就已经适用大部分项目
如果是移动端项目需要配置下面自动转化px为视口单位: 对应依赖没有的安装下:postcss-px-to-viewport 和 postcss-loader

	npm install postcss-loader postcss-px-to-viewport --save-dev

在本文件中搜索const getStyleLoaders = (cssOptions 大约在100行左右,找到postcss-loader的配置:并添加进去如下配置。
(查看webpack配置代码版本,这里有两种版本样式,配置稍有点区别)
1.若结构是这样的,使用该配置方式
在这里插入图片描述
红框内容如下


                  [
                    'postcss-px-to-viewport',
                    {
                      unitToConvert: 'px', //需要转换的单位,默认为"px"
                      viewportWidth: 375, // 视窗的宽度,对应的是我们设计稿的宽度
                      viewportHeight: 1334,//视窗的高度,根据375设备的宽度来指定,一般指定667,也可以不配置
                      unitPrecision: 13, // 指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
                      propList: ['*'], // 能转化为vw的属性列表
                      viewportUnit: 'vw', // 指定需要转换成的视窗单位,建议使用vw
                      fontViewportUnit: 'vw', //字体使用的视口单位
                      selectorBlackList: ['.ignore-', '.hairlines'], //指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
                      minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
                      mediaQuery: false, // 允许在媒体查询中转换`px`
                      replace: true, //是否直接更换属性值,而不添加备用属性
                      exclude: [
                        /RightBar/,
                        /gotop.vue/,
                      ], //忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
                      landscape: false, //是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
                      landscapeUnit: 'vw', //横屏时使用的单位
                      landscapeWidth: 1134 //横屏时使用的视口宽度
                    }
                  ],

若是这样的:
在这里插入图片描述
红框代码如下

	require('postcss-px-to-viewport')({
	  viewportWidth: 750, // (Number) The width of the viewport.
	  viewportHeight: 1334, // (Number) The height of the viewport. -- 一般不需要配置
	  unitPrecision: 3, // (Number) The decimal numbers to allow the REM units to grow to.
	  viewportUnit: "vw", // (String) Expected units.
	  selectorBlackList: [], // (Array) The selectors to ignore and leave as px.
	  minPixelValue: 1, // (Number) Set the minimum pixel value to replace.
	  mediaQuery: false // (Boolean) Allow px to be converted in media queries.
	}),
	{
	  unitToConvert: "px",// 要转化的单位
	  viewportWidth: 750,// UI设计稿的宽度
	  viewportHeight: 1334, // UI设计稿的高度
	  unitPrecision: 3,// 转换后的精度,即小数点位数
	  propList: [
	    "*"
	  ],// 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
	  viewportUnit: "vw",// 指定需要转换成的视窗单位,默认vw
	  fontViewportUnit: "vw",// 指定字体需要转换成的视窗单位,默认vw
	  landscapeUnit: 'vh',// 横屏时使用的单位
	  landscapeWidth: 667,// 横屏时使用的视口宽度
	  selectorBlackList: [],// 指定不转换为视窗单位的类名
	  minPixelValue: 1,// 默认值1,小于或等于1px则不进行转换
	  mediaQuery: false,// 是否在媒体查询的css代码中也进行转换,默认false
	  replace: true,// 是否转换后直接更换属性值
	  // landscape: false, // 是否处理横屏情况
	  exclude: /(\/|\\)(node_modules)(\/|\\)/, // 设置忽略文件,用正则做目录名匹配
	}

Mobx装饰器配置
在package.json中添加红框内容
在这里插入图片描述


  "babel": {
    "plugins": [
      [
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ],
      [
        "@babel/plugin-proposal-class-properties",
        {
          "loose": true
        }
      ]
    ],
    "presets": [
      "react-app"
    ]
  }

根目录下的jsconfig.json 中添加配置
在这里插入图片描述

	"experimentalDecorators": true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云镜像区别公共镜像、自定义、共享、云市场和社区镜像介绍

阿里云服务器镜像根据来源不同分为公共镜像、自定义镜像、共享镜像、云市场镜像和社区镜像,一般没有特殊情况选择公共镜像,公共镜像是阿里云官网提供的正版授权操作系统,云市场镜像是在纯净版操作系统的基础上预装了相关软件及运行环境&#…

自动修改文章的软件-文章原创软件

免费版自动修改文章的软件 免费版自动修改文章的软件是一种又快速、易用且免费的文章修改软件,可以帮助用户批量修改文章和图文,并为用户提供高质量的修改服务。用户仅需上传待修改的文章文件,软件就能自动检测出文章中的语法、拼写错误和表…

开发人员如何理解《辟邪剑谱》的“前8个字”

辟邪剑谱可以说是武林至宝,人人都想得到,让自己冲破三流侠客的行列。得到的人,心里激动不已,得等到四下无人的时候才敢偷偷去练。但奈何最前面有8个字被折叠起来了,很多人也曾得到过,但一直没看到这前8个字…

【shell函数】

目录 一、shell函数1、shell函数的定义 二、函数传参三、阶乘四、函数实验题目 一、shell函数 使用函数可以避免代码重复 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强 1、shell函数的定义 函数返回值: return表示退出函数并返回一个退出值&…

Linux | 学习笔记(适合小白)

操作系统概述: 计算机是由硬件和软件这两个主要部分组成的操作系统是软件的一类,主要作用是协助用户调度硬件工作,充当用户和计算机硬件之间的桥梁常见的操作系统:PC端:Windows,Linux,MacOS&…

ShardingSphere系列一(MySQL主从架构及读写分离实战(搭建主从集群、MySQL高可用方案MHA、分库分表概念))

文章目录 1. 搭建主从集群1.1 概念1.2 同步的原理1.3 搭建主从同步实战1.3.1 配置master主库1.3.2 配置slave从库1.3.3 主从集群测试 1.4 主从同步扩展1.4.1 主库同步与部分同步(同步范围限制)1.4.2 读写分离配置1.4.3 其他集群方式 1.5 GTID同步集群1.6…

Linux的这七大认识误区,你千万别有!

导读本文罗列了大家对Linux的七大认识误区,看看其中那个是你也出现过的。千万别让这些先入为主的观点断送了你体验新事物的机会。 Linux的受众群体并不大。对还是错? 错!大错而特错。 我承认,Linux的实际用户数量很难统计,因为…

【1.JS基础-JavaScript的基本语法和数据类型】

1.JavaScript的编写方式 2 JavaScript的交互方式 3 Chrome的调试工具 4 变化数据的记录 – 变量 如果一个变量有声明,但是没有赋值,那么默认值是undefined 5 JavaScript的数据类型 typeof操作符 6 Number类型 number 类型代表整数和浮点数。 ◼ isNaN…

举一反三学python(12)—制作简易计算器

下图为简易、实用的计算器的效果图,今天展示用百行代码完成。 一、导入模块 import tkinter as tk 二、整体布局 win tk.Tk() # 实例化一个窗体对象 win.title(简易计算器) # 窗口标题 win.geometry(295x280) # 窗…

ESP8266图形播放器 + 天气时钟显示项目更新

<fontcolor=green>ESP8266图形播放器 + 天气时钟显示项目更新 🎞原项目播放效果演示:https://www.ixigua.com/6968269356820070912?logTag=f37e7f1f5cefa9876746✨由于有些库的更新以及API调用接口的失效,特此更新,内容上做了精简和优化。⚡由于所调用的库比较多,…

IPWorks VoIP 2022.0.8505 C++ Edition

IPWorks VoIP IPWorks VoIP 2022 C Edition 支持常见 SIP 和 IVR 操作的简单 VoIP 库。 网络语音组件 IPWorks VoIP 提供 SIP 和 IVR 组件&#xff0c;旨在促进 CTI 应用中的常见 VoIP 操作。快速集成功能&#xff0c;以根据您的自定义 IVR 菜单建立拨出呼叫、接听来电和路由呼…

kt:reified和sam转换(Single Abstract Method Conversions)

什么是refied关键字 ​由于我们都知道Kotlin和Java一样都存在着泛型擦除问题&#xff0c;而Kotlin它知道Java所带来的这个问题&#xff0c;所以对此Kotlin留了一个后门&#xff0c;就是通过inline函数保证使得泛型类的类型实参在运行时能够保留&#xff0c;这样的操作 Kotlin 中…

使用OpenCV部署全景驾驶感知网络YOLOP

开源项目 MCnet 是一个神经网络模型&#xff0c;用于实现车辆视觉感知的任务&#xff0c;比如车道线检测、行驶区域分割和物体检测等。MCnet 的全称是 Multitask CNN&#xff0c;它在单个神经网络模型中集成了多个任务的网络结构&#xff0c;可以同时对输入图像进行多个任务的…

Day964.从持续构建到持续集成 -遗留系统现代化实战

从持续构建到持续集成 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于从持续构建到持续集成的内容。 如何修改后的代码可以“火速”部署到生产环境里&#xff0c;这样才能提高整个端到端的交付效率&#xff0c;让每次改动工作都能及时得到反馈&#xff0c;尽快验证…

看火山引擎DataLeap如何做好电商治理(二):案例分析与解决方案

接上篇&#xff0c;以短视频优质项目为例&#xff0c;火山引擎DataLeap平台治理团队会去对每天发布的这种挂购物车车短视频打上标签&#xff0c;识别这些短视频它是优质的还是低质的&#xff0c;以及具体原因。一个视频经过这个模型识别之后&#xff0c;会给到奖惩中心去做相应…

聊一聊 用 dotnet-trace 调查 lock锁竞争

一&#xff1a;背景 1. 讲故事 最近在分析一个 linux 上的 dump&#xff0c;最后的诱因是大量的lock锁诱发的高频上下文切换&#xff0c;虽然问题告一段落&#xff0c;但我还想知道一点信息&#xff0c;所谓的高频到底有多高频&#xff1f;锁竞争到底是一个怎样的锁竞争&…

将训练好的模型保存在服务端的三种办法

刚刚在完善我书中第七章案例的文档时&#xff0c;需要将训练好的模型存储在服务端&#xff0c;方便小伙伴们来使用该模型&#xff0c;这里我提供三种办法&#xff1a; 直接从我的个人网站中加载&#xff1b;通过python启动一个文件下载服务器&#xff1b;使用微信小程序云存储…

windows10+detectron2完美安装教程

文章目录 前言下载detectron2安装Visual Studio 2019修改代码 前言 需要下载detectron2的github项目&#xff0c;安装vs2019 (强烈建议这个版本&#xff0c;其他的版本需要做更多地操作才能成功安装)&#xff0c;默认其他环境没问题。 下载detectron2 链接&#xff1a;https…

【来点小剧场--爪哇岛寻宝】java实现网络编程,写一个简易的回显服务程序

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络编程的文章&#xff0c;在这篇文章中我会剖析一段回显服务程序的执行步骤和代码编程&#xff0c;希望对你有所帮助&#xff01; 目录 客户端 服务端 总结 客户端 现在我们…

Postman完全卸载步骤

一、卸载应用程序 我们首先正常右键点击卸载通过windows程序卸载功能来卸载postman应用程序。 二、删除文件 &#xff08;1&#xff09;删除AppData》Roadming下的postman文件夹 &#xff08;2&#xff09;删除AppData》Roadming》\Microsoft\Windows\Start Menu\Programs下的p…