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的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
随机推荐
- json中loads()和dumps()的应用
import json s = {'name': 'jack'} #将dict转换成strl = json.dumps(s)print(type(l)) #将str转换成dictm = json.lo ...
- PHP 异步执行方式
在工作中我们经常遇到一些比较耗时的任务,比如用户注册发送邮件,审核短信通知等功能,同步执行这些功能的话,响应时间就会变长,所以一般我们会用队列去管理这些功能,但是如果条件不允许怎么办,今天get了一个 ...
- ios系统App Store安装包下载链接获取
今天将自己开发的Android版本和ios版本的安装包通过生成二维码的方式展示在H5页面上,Android版的比较简单,但是ios的安装包用户必须从App Store(苹果应用市场)中下载安装,所以获 ...
- 使用 iview Table 表格组件修改操作的显示隐藏
使用 iview Table 表格组件修改操作的显示隐藏,如下图 1.如何设置 table 操作按后台传入的状态值去渲染 不同的按钮? 解决方法 我们在vue2中,动态渲染html 使用的是 retu ...
- tomcat的相关
[针对tomcat修改,那么就直接找关于tomcat的相关文件目录进行修改即可] 1.对tomcat进行相关的操作,启动tomcat时,让其不要出现tomcat主页,与之相反的让其出现404的界面! ...
- 01:kubernetes基础
1.1kubernetes简介 参考博客:https://www.kubernetes.org.cn/k8s 1.kubernetes介绍 1. Kubernetes是容器集群管理系统,是一个开源 ...
- Bug快到碗里来
Bug快到碗里来 python错误--'list' object is not callable 原因及解决方法1 你定义了一个变量的变量名和系统自带的关键字冲突,调用变量时关键字被传到调用的位置,就 ...
- MySQL中的索引优化
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...
- linux VMware 提供的网络连接有 5 种详细讲述
VMware 提供的网络连接有 5 种,分别是"桥接模式"."NAT 模式"."仅主机模式"."自定义"和"L ...
- linux:RAID(磁盘阵列)笔记
RAID磁盘阵列简述: RAID0(条带): 把多个同样大小的磁盘串联起来当做一个磁盘来用. 优点:读写速度快. 缺点:数据容易丢失(没有容错能力). ...