create-react-app踩坑记
前言
哇,不的不说这个react 这个脚手架create-react-app
脚确实有很多问题,哈哈,下面来看看吧有哪些坑:
引用sass或者less
记得16年还是几年是不支持sass,和less的,貌似现在支持了,我配置sass 也遇到很多问题,还是不能正确使用:
在这个之前:你需要运行
npm run eject
create-react-app生成的项目文,看不到webpack相关的配置文件,需要先暴露出来:
然后运行:
npm install sass-loader node-sass --save-dev
修改webpack配置
修改 webpack.config.dev.js 和 webpack.config-prod.js 配置文件
大概在158行吧:
/\.css$/ 改为/\.(css|sass)$/,
完整的代碼:
{
test: /\.(css|sass)$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules:true,
},
},
{
loader: require.resolve('postcss-loader'),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
autoprefixer({
browsers: [
'>1%',
'last 4 versions',
'Firefox ESR',
'not ie < 9', // React doesn't support IE8 anyway
],
flexbox: 'no-2009',
}),
],
},
},
{
loader: require.resolve('sass-loader') // compiles sass to CSS
},
],
},
在198行 添加如下配置:
{
// Exclude `js` files to keep "css" loader working as it injects
// its runtime that would otherwise processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/, /\.scss$/],
loader: require.resolve('file-loader'),
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
}, {
test: /\.scss$/,
loaders: ['style-loader', 'css-loader', 'sass-loader']
}
添加.sass文件
我是把安裝的antd ui庫 導入
當然你需要 npm i antd --save
我把那個common.scss 文件下引入下面2個 一個是antd 和阿里圖庫,
@import "~antd/dist/antd.sass";
@icon-url: '~antd/dist/iconfont/iconfont';// 把 iconfont 地址改到本地
另外:!!! 还需要将原先在主css文件中添加的@import '~antd/dist/antd.css';
语句移除。
哈哈這樣就好了
CSS模块加载
react css 都是一块加载的,如果你那个文件的css 的ID或者class 类一样了,这样就会被覆盖了,还有就是会一起加载,
这个对于我 3个字:不能忍
当然有办法咯:
在修改 webpack.config.dev.js 和 webpack.config-prod.js 配置文件
在164 行:
加入 modules:true,
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules:true,
},
},
然后重新 npm start
antd按需加载
因为antd 样式很多,那总不能一次性都加载吧,这样性能很能不好,当然我这里推荐使用 babel-plugin-import
npm i babel-plugin-import --save-dev
当然我 的方法是 在你的react 需要执行eject命令,这个命令是不可逆的
需要在暴露的config 文件下 2个文件
webpack.config.dev.js和webpack.config.prod.js
添加以下代码:
在webpack.config.dev.js 的147行左右
plugins: [
['import', [{ libraryName: "antd", style: 'css' }]],
],
在webpack.config.prod.js 的153行左右
然后重新 run start
react 跨越问题
这个问题我前面也写了相关的博客 详情可以往里面看 -》 https://www.cnblogs.com/yf-html/p/9251895.html
生产环境去除sourcemap
修改webpack.config.prod.js
// devtool: shouldUseSourceMap ? 'source-map' : false,
devtool: false,
添加插件 webpack-bundle-analyzer
npm i webpack-bundle-analyzer --save-dev
修改 webpack.config.prod.js
const BundleAnalyzerPlugin = require(
'webpack-bundle-analyzer').BundleAnalyzerPlugin plugins:[
....,
new BundleAnalyzerPlugin(),
]
.项目打包生成.gz文件
npn i --save-dev compression-webpack-plugin
修改webpack.config.prod.js
const CompressionPlugin = require("compression-webpack-plugin"); plugins: [
...
new CompressionPlugin({
asset: "[path].gz[query]",
algorithm: "gzip",
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
}),
]
总结
好啦,目前的坑 我遇到的,后面如果还有我会继续更博的, 讲道理 还是挺喜欢的react ,
毕竟 我是react 重度 喜欢者 ,不知道你是不是和我一样咯
create-react-app踩坑记的更多相关文章
- Hook踩坑记:React Hook react-unity-webgl
自公司前后分离上手React以来,一个坑一个坑的踩,Class的全生命周期云里雾里,还么屡明白,就抱上了Hook的大腿不松手,确实爽到飞起.修改到Hook的过程基本比较顺畅,直接少了三分之一的代码,组 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- 深入 Create React App 核心概念
本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- EOS踩坑记 2
[EOS踩坑记 2] 1.--contracts-console 在开发模式下,需要将 nodeos 添加此选项. 2.Debug Method The main method used to deb ...
- EOS踩坑记
[EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...
- [转]Spark 踩坑记:数据库(Hbase+Mysql)
https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...
- Spark踩坑记——数据库(Hbase+Mysql)转
转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
随机推荐
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_03.入门程序之需求分析
- js获取当天时间,7天前后时间,时间格式化
格式化时间年月日时分秒 //时间戳转换方法 date:时间戳数字 formatDate(date) { var date = new Date(date); var YY = date.getFull ...
- 17.DRX操作时序
DRX状态转移 OnDuration:监听态,监听并接收PDCCH,也叫激活态 StayActive:保持激活状态(做完业务后,继续监听一段时间和一个非激活定时器时间,或者还有缓存) off:off状 ...
- 【机器学习】Linear least squares, Lasso,ridge regression有何本质区别?
Linear least squares, Lasso,ridge regression有何本质区别? Linear least squares, Lasso,ridge regression有何本质 ...
- mysql——查询语句——单表查询——(示例)
一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...
- spring boot-3.原理探究
新建的项目结构如下图: 1.POM 文件 项目会默认依赖 spring-boot-starter-parent 项目 <parent> <groupId>org.springf ...
- wget断点续传下载需要登录的网站上的大文件
1 举个例子 xcode 2 方法 wget --load-cookies=cookies.txt -c url -c是断点续传,如果网络断了,再运行该命令会接着最新的下载继续下载. --load- ...
- <<C++ Primer>> 第四章 表达式
术语表 第 4 章 表达式 算术转换(arithmetic conversion): 从一种算术类型转换成另一种算术类型.在二元运算符的上下文中,为了保留精度,算术转换通常把较小的类型转换成较大的类型 ...
- 插入数据库失败([Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version)
报错信息如下: , ) 原因,read是数据库的关键字, 牢记,如果一个词是数据库的关键字,那么在写数据库语句的时候,这个词一定是蓝色的(关键字颜色)!!
- 使用RSA算法对接口参数签名及验签
在不同的服务器或系统之间通过API接口进行交互时,两个系统之间必须进行身份的验证,以满足安全上的防抵赖和防篡改. 通常情况下为了达到以上所描述的目的,我们首先会想到使用非对称加密算法对传输的数据进行签 ...