快来跟我一起学 React(Day4)

本文介绍了如何从头开始搭建一个React项目,详细讲解了ESLint的配置过程,包括安装各种相关依赖如eslint、eslint-config-react-app、typescript等,并展示了如何处理ESLint的警告。同时,还涉及到了webpack的配置优化,如minimizer、Devtool以及分包机制。最后,文章提供了完整的项目代码链接供读者参考。
摘要由CSDN通过智能技术生成

简介

上一节我们从 0 开始搭建了一个项目,完成了入口与出口的配置、ts 语法支持、react 基本库的安装、css 样式配置等工作,我们继续上一节的内容。

知识点
  • Eslint(代码质量校验)
  • eslint-webpack-plugin(Eslint webpack 插件)
  • eslint-config-react-app(React 官方 eslint 配置)
  • fork-ts-checker-webpack-plugin(ts 语法校验插件)
  • Optimization(分包优化等)

准备

上一节所有的内容在 dev 分支:https://gitee.com/vv_bug/cus-react-demo/tree/dev,我们重新切一个新分支 dev-v1.0.0

我们安装好依赖,并且用 npm start 命令启动项目:

npm install --registry https://registry.npm.taobao.org && npm start

在这里插入图片描述

可以看到,浏览器自动打开了我们项目入口,并且在页面正常显示了 ”hello react111“ ,到这,我们的准备工作算是完成了。

Eslint

ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。

接下来我们来安装一下 ESLint 相关依赖:

安装 ESLint

Eslint 核心 API。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint --registry https://registry.npm.taobao.org
安装 eslint-webpack-plugin

Eslint 在 Webpack 中的插件。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint-webpack-plugin --registry https://registry.npm.taobao.org
安装 eslint-config-react-app

React 官方提供的 Eslint 配置。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint-config-react-app --registry https://registry.npm.taobao.org
安装 @typescript-eslint/eslint-plugin

ESLint 中的 ts 插件。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D @typescript-eslint/eslint-plugin --registry https://registry.npm.taobao.org
安装 @typescript-eslint/parser

ESLint 中的 ts 语法解析器。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D @typescript-eslint/parser --registry https://registry.npm.taobao.org
安装 typescript

ts 语法核心库。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D typescript --registry https://registry.npm.taobao.org
安装 eslint-plugin-import

Eslint 中对 EsModule 导入导出的规范插件。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint-plugin-import --registry https://registry.npm.taobao.org
安装 eslint-plugin-flowtype

Eslint 中对 flow 语法规范插件。

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint-plugin-flowtype --registry https://registry.npm.taobao.org
安装 eslint-plugin-jsx-a11y
安装 eslint-plugin-react-hooks
安装 eslint-plugin-react
安装 babel-eslint

在工程目录 cus-react-demo 下执行以下命令安装:

npm install -D eslint-plugin-jsx-a11y eslint-plugin-react-hooks  eslint-plugin-react babel-eslint --registry https://registry.npm.taobao.org

总算是安装完毕了,其实这些都是 React 官方要求的一些 Eslint 插件,都是在 eslint-config-react-app 中定义要求的,每一个具体什么功能我就不一一分析了,小伙伴自己去官网查看哦,童鞋们平时也不需要刻意去记这些东西,直接 copy 然后安装即可,ESLint 依赖我们是安装完毕了,下面我们来给项目配置一下 ESLint。

首先找到 webpack 配置文件 webpack.config.js,然后添加 eslint-webpack-plugin

const path = require('path');
const config = new (require('webpack-chain'))();
const isDev = process.env.NODE_ENV === 'development'; // 判断是否是开发环境
config
    .target('web')
    .context(path.resolve(__dirname, '.')) // webpack 上下文目录为项目根目录
    .entry('app') // 入口文件名称为 app
        .add('./src/main.tsx') // 入口文件为 ./src/main.tsx
        .end()
    .output
        .path(path.join(__dirname, './dist')) // webpack 输出的目录为根目录的 dist 目录
        .filename(isDev ? '[name].[hash:8].js' : '[name].[contenthash:8].js') // 打包出来的 bundle 名称为 "[name].[contenthash:8].js"
        .publicPath('/') // publicpath 配置为 "/"
        .end()
    .resolve
        .extensions.add('.js').add('.jsx').add('.ts').add('.tsx').end() // 添加后缀自动解析
        .end()
    .module
        .rule('ts') // 配置 typescript
            .test(/\.(js|mjs|jsx|ts|tsx)$/)
            .exclude
                .add(filepath => {
   
                    // Don't transpile node_modules
                    return /node_modules/.test(filepath)
                })
                .end()
            .use('babel-loader')
                .loader('babel-loader')
                .end()
            .end()
        .rule('sass') // sass-loader 相关配置
            .test(/\.(sass|scss)$/) // Sass 和 Scss 文件
            .use('extract-loader') // 提取 css 样式到单独 css 文件
                .loader(require('mini-css-extract-plugin').loader)
                .end()
            .use('css-loader') // 加载 css 模块
                .loader('css-loader')
                .end()
            .use('postcss-loader') // 处理 css 样式
                .loader('postcss-loader')
                .end()
            .use('sass-loader') // Sass 语法转 css 语法
                .loader('sass-loader')
                .end()
            .end()
        .end()
    .plugin('extract-css') // 提取 css 样式到单独 css 文件
        .use(require('mini-css-extract-plugin'), [
            {
   
                filename: isDev ? 'css/[name].css': 'css/[name].[contenthash].css',
                chunkFilename: isDev ? 'css/[id].css': 'css/[name].[contenthash].css',
            },
        ])
        .end()
    .plugin('html') // 添加 html-webpack-plugin 插件
        .use(require('html-webpack-plugin'), [
            {
   
                template: path.resolve(__dirname, './public/index.html'), // 指定模版文件
                chunks: ['app'], // 指定需要加载的 chunk
                inject: 'body', // 指定 script 脚本注入的位置为 body
            },
        ])
        .end()
    .plugin('eslint') // 添加 eslint-webpack-plugin 插件
        .use(require('eslint-webpack-plugin'), [
            {
   
                // Plugin options
                extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'],
                eslintPath: require.resolve('eslint'),
                failOnError: !isDev,
                context:</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值