React 知识汲取篇 —— react-app-rewired config-overrides.js配置
文章目录
- 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配置相关推荐
- vue中config/index.js:配置的详细理解
当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面 (环境变量及其基本变量的配置) 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 前端知识体系(7)-react篇
1.什么是 React React是一个简单的javascript UI库,用于构建高效.快速的用户界面.它是一个轻量级库,因此很受欢迎.它遵循组件设计模式.声明式编程范式和函数式编程概念,以使前端应 ...
- 构建工具篇 - react 的 yarn eject 构建命令都做了什么
前言 前段时间,一直在研究 react 技术栈,对于项目的构建方面,又有一定的特殊需求,通过 npx create-react-app [filename] 安装以后,发现没有 webpack 相关的 ...
- uniapp+egg.js+react实现全栈笔记App
软件介绍 这是一个笔记App,主要使用的技术是uniapp+egg.js+react 软件预览图片: 首页: 编辑页面.png 编辑和登录页面 编辑页面2.png 项目地址: https://gith ...
- 前端每周清单半年盘点之 React 与 ReactNative 篇
前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID:front ...
- React Native零基础+React Native重入门到精通+混合APP完整版
第1章 介绍课程目标和学习内容 包括课程概述.课程安排.学习前提.讲授方式等方面的介绍,最后演示了整个招聘App的功能,让同学们对课程项目有一个直观的了解. 1-1 课程导学 第2章 知识储备 2-1 ...
- 构建 Snowpack + React + Typescript + Electron的Desktop App
Atom和VSCode都是基于Electron开发的项目,在好奇心的催动下,我就组合了一个简单的Electron + Snowpack的框架. 简介 Electron Electron 是一个使用 J ...
- 如何用 React Native 创建一个iOS APP?(二)
我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...
- react中webpack.config.js配置lessless-loader less
这是我第一次配置这些,没有学过webpack,出过很错,还好后来都一一改正.我觉得我遇到的大部分问题就是版本更新了,和老师教的时候用的有一些不一样,但是我想尽量不要去直接将那些包的版本降低,最好还是使 ...
最新文章
- RHEL7.2上基于eSpeak实现TTS
- python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...
- build vue 选哪个_分析vue-cli项目,简单修改,来快速理解这个项目的结构
- Pixhawk之姿态解算篇(4)_补充篇
- SAP gateway currency transformation from string to ABAP format - deserialization
- svm中的数学和算法
- github最全计算机类电子书下载
- 8芯网线中哪几根是有用的?
- 黑苹果驱动 hackintosh
- 解决 当前上下文中不存在名称 c#
- python 折线图 百分比_Python数据可视化 - 使用Matplotlib库绘制点图、折线图、条状图与饼图...
- RAR文件设置了密码,如何打开?
- 【调剂】齐齐哈尔大学接收调剂研究生
- 图的表示(Adjacency List + Adjacency Matrix)
- with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
- czl蒻蒟的OI之路4
- 2021华为软件精英挑战赛,思路框架,欢迎留言讨论
- [OpenVas/Gvm]Failed to find config ‘085569ce-73ed-11df-83c3-002264764cea‘
- Google API 地图离线版
- Linux系统网卡出现drop,linux 清除网卡缓存