文章目录

  • react-app-rewired
  • 按需加载 babel-plugin-import
  • 安装less
  • 配置路径名别名
    • path.resolve和path.join的区别
  • 整体的安装配置

react-app-rewired

在学习React的时候 通过react脚手架create-react-app创建了项目,但是发现了一个问题 如果没有执行eject命令的话 是没有其他配置文件的 这个时候就需要 用到 customize-cra 和 react-app-rewired插件
然后在根目录下新建一个名称为config-overrides.js的文件。在里面去进行所有的配置

npm install react-app-rewired customize-cra --save-dev

react-app-rewired的作用就是在不eject的情况下,覆盖create-react-app的配置

然后修改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修改默认的一些配置

module.exports =function override(config, env){return config;
};

按需加载 babel-plugin-import

babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件
官网
https://github.com/ant-design/babel-plugin-import
安装

npm install babel-plugin-import --save-dev
//引入
const { injectBabelPlugin } =require('react-app-rewired');
//使用
module.exports =function override(config, env){config= injectBabelPlugin(['import', { libraryName:'antd', style:true}],config);return config;};

然后在组件中就可以直接进行引用

import { Button } from 'antd';

安装less

安装所需less依赖

npm install less-loader less --save-dev

安装react-app-rewire-less

npm install --save-dev react-app-rewire-less

config-overrides.js 修改配置

const rewireLess = require('react-app-rewire-less');config = rewireLess.withLoaderOptions({modifyVars: { "@primary-color": "#1DA57A" },javascriptEnabled: true
})(config, env);

这里也可以自定义支持自己的主题
可以参考一个大佬的文章
antd在线换肤定制功能

config = rewireLess.withLoaderOptions({modifyVars: getLessVars(path.join(__dirname, './src/styles/vars.less')),javascriptEnabled: true})(config, env);

配置路径名别名

const { override, addWebpackAlias} = require('customize-cra');
const path = require('path')module.exports = override(addWebpackAlias({assets: path.resolve(__dirname, './src/assets'),pages: path.resolve(__dirname, './src/pages')})
);

path.resolve和path.join的区别

一、path.join()方法

path.join()方法是将多个参数字符串合并成一个路径字符串

console.log(path.join(__dirname,‘a’,‘b’));
假如当前文件的路径是E:/node/1,那么拼接出来就是E:/node/1/a/b。

console.log(path.join(__dirname,’/a’,’/b’,’…’));
路径开头的/不会影响拼接,…代表上一级文件,拼接出来的结果是:E:/node/1/a
  console.log(path.join(__dirname,‘a’,{},‘b’));
而且path.join()还会帮我们做路径字符串的校验,当字符串不合法时,会抛出错误:Path must be a string.
二、path.resolve()方法   path.resolve()方法是以程序为根目录,作为起点,根据参数解析出一个绝对路径
  以应用程序为根目录   普通字符串代表子目录   /代表绝对路径根目录
     console.log(path.resolve()); 得到应用程序启动文件的目录(得到当前执行文件绝对路径) E:\zf\webpack\1\src   console.log(path.resolve(‘a’,’/c’)); E:/c
,因为/斜杠代表根目录,所以得到的就是E:/c   所以我们一般拼接的时候需要小心点使用/斜杠
  console.log(path.resolve(__dirname,‘img/so’));
E:\zf\webpack\1\src\img\so 这个就是将文件路径拼接,并不管这个路径是否真实存在。
  console.log(path.resolve(‘wwwroot’, ‘static_files/png/’,
‘…/gif/image.gif’))
E:\zf\webpack\1\src\wwwroot\static_files\gif\image.gif
  这个是用当前应用程序启动文件绝对路径与后面的所有字符串拼接,因为最开始的字符串不是以/开头的。   …也是代表上一级目录。

首先需要先引入

const path = require('path');

-------------------------------------------------------案例-------------------------------------------------------------------
转载于https://blog.csdn.net/qq_33745501/article/details/80270708
path.join()

const path = require('path');
let myPath = path.join(__dirname,'/img/so');
let myPath2 = path.join(__dirname,'./img/so');
let myPath3=path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');console.log(__dirname);
console.log(myPath);
console.log(myPath2);
console.log(myPath3);

path.resolve()

let myPath = path.resolve(__dirname,'/img/so');
let myPath2 = path.resolve(__dirname,'./img/so');
let myPath3=path.resolve('/foo/bar', './baz');
let myPath4=path.resolve('/foo/bar', '/tmp/file/');console.log(__dirname);
console.log(myPath);
console.log(myPath2);
console.log(myPath3);
console.log(myPath4);


其中__dirname就是当前文件的路径

整体的安装配置

yarn add @babel/plugin-proposal-decorators    //修饰器
yarn add codebandits/react-app-rewire-css-modules sass-loader node-sass    //css、sass模块化
yarn add babel-plugin-import   //antd按需加载
yarn add react-app-rewire-less-modules  //less模块化
const { injectBabelPlugin } = require('react-app-rewired');
const rewireCssModules = require('react-app-rewire-css-modules');
const rewireLess = require('react-app-rewire-less-modules')
const path = require('path')function resolve (dir) {return path.join(__dirname, '.', dir)
}module.exports = function override(config, env) {// do stuff with the webpack config...//启用ES7的修改器语法(babel 7)config = injectBabelPlugin(['@babel/plugin-proposal-decorators', { "legacy": true }], config)   //{ "legacy": true }一定不能掉,否则报错//css模块化config = rewireCssModules(config, env);//配置别名config.resolve.alias = {'@': resolve('src')}//antd按需加载config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }], config,);//less模块化config = rewireLess.withLoaderOptions({javascriptEnabled: true,modifyVars: {'@primary-color': '#1DA57A'},})(config, env)return config;
};

React 知识汲取篇 —— react-app-rewired config-overrides.js配置相关推荐

  1. vue中config/index.js:配置的详细理解

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. 前端知识体系(7)-react篇

    1.什么是 React React是一个简单的javascript UI库,用于构建高效.快速的用户界面.它是一个轻量级库,因此很受欢迎.它遵循组件设计模式.声明式编程范式和函数式编程概念,以使前端应 ...

  3. 构建工具篇 - react 的 yarn eject 构建命令都做了什么

    前言 前段时间,一直在研究 react 技术栈,对于项目的构建方面,又有一定的特殊需求,通过 npx create-react-app [filename] 安装以后,发现没有 webpack 相关的 ...

  4. uniapp+egg.js+react实现全栈笔记App

    软件介绍 这是一个笔记App,主要使用的技术是uniapp+egg.js+react 软件预览图片: 首页: 编辑页面.png 编辑和登录页面 编辑页面2.png 项目地址: https://gith ...

  5. 前端每周清单半年盘点之 React 与 ReactNative 篇

    前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID:front ...

  6. React Native零基础+React Native重入门到精通+混合APP完整版

    第1章 介绍课程目标和学习内容 包括课程概述.课程安排.学习前提.讲授方式等方面的介绍,最后演示了整个招聘App的功能,让同学们对课程项目有一个直观的了解. 1-1 课程导学 第2章 知识储备 2-1 ...

  7. 构建 Snowpack + React + Typescript + Electron的Desktop App

    Atom和VSCode都是基于Electron开发的项目,在好奇心的催动下,我就组合了一个简单的Electron + Snowpack的框架. 简介 Electron Electron 是一个使用 J ...

  8. 如何用 React Native 创建一个iOS APP?(二)

    我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...

  9. react中webpack.config.js配置lessless-loader less

    这是我第一次配置这些,没有学过webpack,出过很错,还好后来都一一改正.我觉得我遇到的大部分问题就是版本更新了,和老师教的时候用的有一些不一样,但是我想尽量不要去直接将那些包的版本降低,最好还是使 ...

最新文章

  1. RHEL7.2上基于eSpeak实现TTS
  2. python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...
  3. build vue 选哪个_分析vue-cli项目,简单修改,来快速理解这个项目的结构
  4. Pixhawk之姿态解算篇(4)_补充篇
  5. SAP gateway currency transformation from string to ABAP format - deserialization
  6. svm中的数学和算法
  7. github最全计算机类电子书下载
  8. 8芯网线中哪几根是有用的?
  9. 黑苹果驱动 hackintosh
  10. 解决 当前上下文中不存在名称 c#
  11. python 折线图 百分比_Python数据可视化 - 使用Matplotlib库绘制点图、折线图、条状图与饼图...
  12. RAR文件设置了密码,如何打开?
  13. 【调剂】齐齐哈尔大学接收调剂研究生
  14. 图的表示(Adjacency List + Adjacency Matrix)
  15. with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
  16. czl蒻蒟的OI之路4
  17. 2021华为软件精英挑战赛,思路框架,欢迎留言讨论
  18. [OpenVas/Gvm]Failed to find config ‘085569ce-73ed-11df-83c3-002264764cea‘
  19. Google API 地图离线版
  20. Linux系统网卡出现drop,linux 清除网卡缓存

热门文章

  1. URG和PSH标志位
  2. linux数据库后缀名,Linux的find命令与文件名后缀
  3. 文件的上传和下载(超详细)
  4. 汇编课程设计:汽车小鸟动画
  5. 兄弟Brother HL-3150CDN 驱动
  6. grub用命令启动linux,通过GRUB命令行来启动Linux操作系统
  7. 【微信小程序】历史搜索记录本地保存功能实现及思路
  8. 入门python多久_入的解释|入的意思|汉典“入”字的基本解释
  9. Java 封装介绍之猫狗案例
  10. 20210519 使用jstack命令排查线程死锁问题