create-react-app 英文 https://create-react-app.dev/
create-react-app 中文 https://www.html.cn/create-react-app/docs/production-build/
create-react-app 初始化
初始化 create-react-app,craco-antd配置
- yarn start 启动项目
- yarn build 构建项目
- yarn test 单元测试
- yarn eject 抛出 webpack配置 ```bash npx create-react-app my-app yarn create react-app my-app
npm init react-app my-app
更新 react-scripts
npm install react-scripts@latest
yarn start 看到这个界面,create-react-app就初始化成功了<br /><a name="jicG2"></a>## 自定义脚手架```bash# 初始化 js项目npx create-react-app [项目名] --template @eleven.fe/cra-templatenpx create-react-app myapp --template @eleven.fe/cra-template# 初始化 ts项目npx create-react-app [项目名] --template @eleven.fe/cra-template-typescript"husky": {"hooks": {"pre-add": "pretty-quick --staged","pre-commit": "pretty-quick --staged"}},
https://www.npmjs.com/package/@eleven.fe/cra-template
https://github.com/eleven-net-cn/create-react-app
importLoaders
用于配置「css-loader 作用于 @import 的资源之前」有多少个 loaderimportLoaders: 1
是在css-loader 之后指定1个数量的loader(即 postcss-loader)来处理import进来的资源
webpack文档 https://webpack.docschina.org/loaders/css-loader/#importloaders
0 => no loaders (default);1 => postcss-loader;2 => postcss-loader, sass-loader
这里的数量指的是当前loader之后loader的数量
- 等于1是说,当前loader之后的一个loader
- 如果是n就是n个loader
- 官网上说是importLoaders的数量默认是0,意思是一个加载器都不用
- 1的意思是用 postcss-loader加载器,
- 2的意思是用 postcss-loaders和sass-loader加载器
babelrc
create-react-app默认是不使用.babelrc的,使用的是package.json中的babel配置和内部配置
config/webpack.config.js文件,将babelrc:false改为true,意思是启用.babelrc的配置
- 同时将package.json中的babel下面的 “presets”: [ “react-app” ] 配置到.babelrc中
- 并将package.json中的babel删除掉

删除 package.json里面的 babel,移动到 .babelrc
"babel": {"presets": ["react-app"]}
在根目录新建 .babelrc,并添加
{"presets": ["react-app"],"plugins": [["import",{"libraryName": "antd","libraryDirectory": "es","style": true}]]}
install babel-plugin-import
yarn add babel-plugin-import -D
修改 /config/webpack.config.js
- 单独根目录新建.babelrc会报错的,原因:如果是运行了eject ,webpack配置了babelrc: false
- 需要在webpack.config.js配置,在module模块,找到 loader: require.resolve(‘babel-loader’) 对象中的plugins数组中添加
- 411行 plugins:[],新增
// style: true 加载 less 文件["import", {"libraryName": "antd", "libraryDirectory": "es", "style": true}],


看到默认的按钮,变色,就代表自定义主题配置成功了
cssModules
默认支持 *.module.css
import styles from './App.module.css';

scss配置
create-react-app支持 scss,直接安装 sass-loader就行
scss需要安装 sass-load & node-sass
yarn add sass-loader node-sass -D
使用 scss
import styles from './App.module.css';
less配置
less需要安装 less & less-loader
yarn add less less-loader -D
/config/webpack.config.js
- 65行新增 lessRegex
const lessRegex = /\.less$/;const lessModuleRegex = /\.module\.less$/;

- 65行新增 lessRegex
542行新增代码如下,就是 把 sassRegex和 sassModuleRegex的配置复制下,然后修改为 less
{test: lessRegex,exclude: lessModuleRegex,use: getStyleLoaders({importLoaders: 2,sourceMap: isEnvProduction && shouldUseSourceMap,},'less-loader'),sideEffects: true,},{test: lessModuleRegex,use: getStyleLoaders({importLoaders: 2,sourceMap: isEnvProduction && shouldUseSourceMap,modules: {getLocalIdent: getCSSModuleLocalIdent,},},'less-loader'),},
结果如下:没有解析 less
- /static/media/App.module.0616ec45.less
重要的一步
- 在 node_modules目录下找到 getCSSModuleLocalIndent.js
- 21行新增 less

- less-loader模块之后报错,如下
- TypeError: this.getOptions is not a function
- 原因: less-loader安装的版本过高
- 是
less-loader的版本过高,不兼容getOptions函数方法,需要对less-loader进行降级处理yarn add less-loader@5.0.0 -D
import styles from './App.module.less';

重要说明:less 配置规则放在 sass 的解析规则下面即可,如果放在了 file-loader 的解析规则下面,less 文件解析不会生效
alias别名配置
webpack.config.js的resolve中配置alias别名
paths.appSrc,来源于 paths.js,
设置一个 @代表src目录即可
jsconfig.json
录中存在jsconfig.json文件表示该目录是JavaScript项目的根目录
jsconfig.json文件指定根文件和JavaScript语言服务提供的功能选项
jsconfig.json源于tsconfig.json,是TypeScript的配置文件
jsconfig.json相当于tsconfig.json的“allowJs”属性设置为true
在根路径下新建 jsconfig.json 可以让 IDEA识别项目的别名(如:@
{"compilerOptions": {"baseUrl": "./","paths": {"@/*": ["src/*"],"@assets/*": ["src/assets/*"],"@components/*": ["src/components/*"]}},"exclude": ["node_modules", "dist", "build"]}
提示:您将要排除由构建过程生成的文件(例如,dist目录
这些文件会导致建议显示两次,并会降低IntelliSense的速度
webstorem不识别 @别名
~ 波浪线是相对于其他路径(文件)的,类似于相对路径
去掉波浪线会报错
~@/assets/scss/_variables.scss 表示相对于@(别名,一般是src目录)下的
@import '~@/assets/less/variable.less';.header {color: @primary-color;}
项目根目录新建 aliasPath.js
const path = require('path')module.exports = {context: path.resolve(__dirname, './'),resolve: {extensions: ['.js', '.json'],alias: {'@': path.resolve('src'),}}}
webstorm设置 webpack 路径
components设计
src/components/ 设计成一个整体
/components/index.ts/Header/index.tsx/Header.tsx/index.module.css/Footer/index.tsx/index.module.css
components/Header/index.tsx
export * from './Header'
components/Footer/index.tsx
export * from './Footer'
components/index.ts
- 导出components下的所有文件夹
export * from './Header'export * from './Footer'
组件使用 components下的组件,以 App.tsx为例
import React from 'react'import {Header, Footer} from '../components'import styled from './app.module.less'function App() {return (<div className={styled.app}><Header /><Footer /></div>)}export default App
eslint配置
a标签href属性警告解决方法
The href attribute is required for an anchor to be keyboard accessible.
Provide a valid, navigable address as the href value.
If you cannot provide an href, but still need the element to resemble a link, use a button and change it with appropriate styles.
Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md jsx-a11y/anchor-is-valid
去除,a href属性警告,在package.json文件中添加如下代码
a标签警告参考 https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md
"eslintConfig": {"extends": ["react-app","react-app/jest"],"rules":{"jsx-a11y/anchor-is-valid":"off"}},
有效的 href
<a href="https://github.com" /><a href="#section" /><a href="foo" /><a href="/foo/bar" /><a href={someValidPath} /><a href="https://github.com" onClick={foo} /><a href="#section" onClick={foo} /><a href="foo" onClick={foo} /><a href="/foo/bar" onClick={foo} /><a href={someValidPath} onClick={foo} />
错误的用法
<a onClick={foo} /><a href="#" onClick={foo} /><a href={"#"} onClick={foo} /><a href={`#`} onClick={foo} /><a href="javascript:void(0)" onClick={foo} /><a href={"javascript:void(0)"} onClick={foo} /><a href={`javascript:void(0)`} onClick={foo} />// 缺少 href属性<a /><a href={undefined} /><a href={null} />// 无效的 href属性,错误的用法<a href="#" /><a href={"#"} /><a href={`#`} /><a href="javascript:void(0)" /><a href={"javascript:void(0)"} /><a href={`javascript:void(0)`} />
Guppy可视化
create-react-app 可视化管理工具
react 应用程序管理器和任务运行器
https://github.com/chinanf-boy/guppy-docs-zh
- create-react-app 可视化创建新项目
- 运行开发服务器
- 执行任务 (构建生产,运行测试)
- 管理依赖项 (添加,更新,搜索)

