React项目打包 优化详解

article/2025/11/7 18:29:41

项目打包和优化-项目打包

目标:能够通过命令对项目进行打包

步骤

  1. 在项目根目录打开终端,输入打包命令:npm run build

  2. 等待打包完成,打包后的内容被放在项目根下的 build 文件夹中

项目打包和优化-项目本地预览

目标:能够在本地预览打包后的项目

步骤

  1. 全局安装本地服务包:npm i -g serve,该包提供了 serve 命令,用来启动本地服务

  2. 在项目根目录中执行命令:serve -s ./build,在 build 目录中开启服务器

  3. 在浏览器中访问:http://localhost:5000/ 预览项目

项目打包和优化-打包体积分析

目标:能够分析项目打包体积

分析说明:通过分析打包体积,才能知道项目中的哪部分内容体积过大,才能知道如何来优化

步骤

  1. 安装分析打包体积的包:npm i source-map-explorer

  2. 在 package.json 中的 scripts 标签中,添加分析打包体积的命令

    "scripts": {"analyze": "source-map-explorer 'build/static/js/*.js'",
    }
  3. 对项目打包:npm run build(如果已经打过包,可省略这一步)

  4. 运行分析命令:npm run analyze

  5. 通过浏览器打开的页面,分析图表中的包体积

项目打包和优化-生产环境优化

目标:能够根据是否为生产环境对redux中间件进行优化 核心代码

store/index.js 中:

let middlewares
​
if (process.env.NODE_ENV === 'production') {// 生产环境,只启用 thunk 中间件middlewares = applyMiddleware(thunk)
} else {middlewares = composeWithDevTools(applyMiddleware(thunk))
}

项目打包和优化-路由懒加载

目标:能够对路由进行懒加载实现代码分隔

步骤

  1. 在 App 组件中,导入 Suspense 组件

  2. 在 Router 内部,使用 Suspense 组件包裹组件内容

  3. 为 Suspense 组件提供 fallback 属性,指定 loading 占位内容

  4. 导入 lazy 函数,并修改为懒加载方式导入路由组件

核心代码

App.js 中:

import { lazy, Suspense } from 'react'//之前
//import Login from '@/pages/Login/Login.jsx'
//import NotFound from './pages/NotFound/NotFound.jsx'
// 导入页面组件 现在
const Login = lazy(() => import('./pages/Login'))
const Layout = lazy(() => import('./pages/Layout'))const App = () => {return (<Router history={history}><Suspensefallback={<divstyle={{textAlign: 'center',marginTop: 200}}>loading...</div>}><div className="app"><Route exact path="/" render={() => <Redirect to="/home" />}></Route><Route path="/login" component={Login}></Route><AuthRoute path="/home" component={Layout}></AuthRoute></div></Suspense></Router>)
}export default App

其他的一样的

项目打包和优化-去掉console

在下载之前最好看一下自己下的webpack版本号 在node_modules中查找webpack文件夹 在package.json中version标识的便是版本号 你下载的包版本最好不要超过这个版本

 

 npm i terser-webpack-plugin@4.2.3 

在craco.config.js文件中配置 

const TerserPlugin = require('terser-webpack-plugin')module.exports = {webpack: {// 省略其他...plugins: [new TerserPlugin({terserOptions: {compress: {drop_console: process.env.NODE_ENV === 'production' // 生产环境下移除控制台所有的内容}}})]}
}

项目打包和优化-配置CDN

目标:能够对第三方包使用CDN优化

  1. 打包的时候不打包进来

  2. 在public/index.html中引入外部链接

分析说明:通过 craco 来修改 webpack 配置,从而实现 CDN 优化  

核心代码

craco.config.js 中:

const path = require('path')
// HtmlWebpackPlugin
const { whenProd, getPlugin, pluginByName } = require('@craco/craco')
module.exports = {webpack: {alias: {'@': path.join(__dirname, 'src')},configure: (webpackConfig) => {let cdn = {js: [],css: []}// 对webpack进行配置whenProd(() => {// 只会在生产环境执行webpackConfig.externals = {react: 'React','react-dom': 'ReactDOM',redux: 'Redux',}cdn = {js: ['https://cdn.bootcdn.net/ajax/libs/react/17.0.2/umd/react.production.min.js','https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js','https://cdn.bootcdn.net/ajax/libs/redux/4.1.0/redux.min.js'],css: []}})const { isFound, match } = getPlugin(webpackConfig,pluginByName('HtmlWebpackPlugin'))if (isFound) {// 找到了html的插件match.options.cdn = cdn}return webpackConfig}}
}

public/index.html 中:

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="theme-color" content="#000000" /><metaname="description"content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /><!--manifest.json provides metadata used when your web app is installed on auser's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/--><link rel="manifest" href="%PUBLIC_URL%/manifest.json" /><!--Notice the use of %PUBLIC_URL% in the tags above.It will be replaced with the URL of the `public` folder during the build.Only files inside the `public` folder can be referenced from the HTML.Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" willwork correctly both with client-side routing and a non-root public URL.Learn how to configure a non-root public URL by running `npm run build`.--><title>React App</title><% htmlWebpackPlugin.options.cdn.css.forEach(cdnURL => { %><link rel="stylesheet" href="<%= cdnURL %>"></link><% }) %></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><!--This HTML file is a template.If you open it directly in the browser, you will see an empty page.You can add webfonts, meta tags, or analytics to this file.The build step will place the bundled scripts into the <body> tag.To begin the development, run `npm start` or `yarn start`.To create a production bundle, use `npm run build` or `yarn build`.--><% htmlWebpackPlugin.options.cdn.js.forEach(cdnURL => { %><script src="<%= cdnURL %>"></script><% }) %></body>
</html>


http://chatgpt.dhexx.cn/article/136nS42R.shtml

相关文章

React vscode 创建 react 项目流程【超详细】

文章目录 一、安装node二、配置淘宝镜像三、配置 vscode&#xff08;win10&#xff09;四、全局安装脚手架五、创建项目编写第一个 react 程序教程 一、安装node 请在官网下载安装&#xff1a;https://nodejs.org/zh-cn/vscode 中 点击 ( ctrl ) 调出终端输入指令node -v&…

react项目关闭eslint监测

前言 同事给我一个前端包&#xff0c;需要我在其他项目中复用该项目中的某些功能。拿到包之后就是npm install安装依赖。解决了node版本与依赖之间的冲突&#xff0c;到后面出现eslint监测运行不了项目&#xff0c;因此写下文章来记录。 解决方案&#xff1a; 在网上也同样找了…

搭建完整react项目(React)

一、创建 React 项目 create-react-app 项目名称二、下载依赖包 1、下载路由 yarn add react-router-dom5.3.0 npm i react-router-dom5.3.02、下载状态机 3、下载 antd npm i antd yarn add antd三、配置相关插件 1、配置路由 2、配置状态机 3、配置 antd antd 框架中…

如何创建一个react项目

读react.js小书观后感 首先需要先确定在电脑中要有node.js的文件以及npm环境 1.运行如下命令 npm install -g create-react-app 通过这条指令在电脑中加入一个创建react项目的指令 2. create-react-app hello-react 通过这个指令来创建一个hello-react的指令&#xff0c…

linux服务器部署react项目步骤详解

一、安装node环境 下载软件包 wget https://nodejs.org/dist/v11.10.0/node-v11.10.0-linux-x64.tar.gz 解压 tar -zvxf node-v11.10.0-linux-x64.tar.gz 建立软连接 ln -s ~/study/node-v11.10.0-linux-x64/bin/npm /usr/local/bin/npm ln …

React项目中引入图片

React项目中引入图片 一、场景描述二、import三、require 一、场景描述 当我们在react项目中使用img标签时&#xff0c;活着style中使用背景图片时&#xff0c;直接使用相对路径会无法引入图片。 例如&#xff1a; <img width"100" height"100" src&q…

vite创建React项目 react从零入门

前言 这几天尝试看React 官方中文文档看多了容易头疼 翻看别人的都很碎片化且不是最新 以至于走了很多弯路 所以我从这里开始记录从零开始 如何创建一个React项目及以简单的页面跳转和传参 意在让初学者能够一步跨进React门槛 2023/5/4 这里是页面跳转传参的记录 一、vite创建…

怎样启动别人创建好的react项目

1.首先下载好创建的react项目后&#xff0c;在cmd命令框中先进到对应的项目路径 2. 命令行输入node -v&#xff0c;npm -v命令&#xff0c;查看对应的版本&#xff0c;如下图 3. 输入npm install命令 来安装依赖&#xff08;需要段时间才成执行完成&#xff09; 如果你是下载…

VSCode --- React项目实操

VSCode --- React项目实操 1.导入项目1.1 开启vscode&#xff0c;进入终端1.2 React项目结构 2.启动项目3.开发3.1 认识项目3.2 创建页面 x.报警 项目模板从git下载的&#xff1a; coreui-free-react-admin-template. 1.导入项目 1.1 开启vscode&#xff0c;进入终端 1.常用快…

Vite创建React项目

文章目录 1. 输入项目名称2. 选择框架3. 选择不同4. 项目创建完成5. 项目结构6. 启动项目 Vite 需要 Node.js 版本 > 12.0.0。&#xff08;node -v 查看自己当前的node版本&#xff09; 使用 yarn&#xff1a;yarn create vitejs/app使用 npm&#xff1a;npm init vitejs/ap…

如何创建一个 react 项目

目录 前言 一、create-react-app 脚手架快速搭建 react 项目 1、安装 create-react-app 2、检测 create-react-app 是否安装成功 3、创建 react 项目 二、generator-react-webpack 脚手架搭建 react 项目 1、安装 yeoman 2、安装 generator-react-webpack 3、创建 rea…

react项目服务器Tomcat,tomcat部署react项目的方法

tomcat部署react项目的方法 发布时间&#xff1a;2020-12-16 09:44:42 来源&#xff1a;亿速云 阅读&#xff1a;151 作者&#xff1a;小新 这篇文章主要介绍了tomcat部署react项目的方法&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章…

如何从零开始创建React项目(三种方式)

在开发 React 项目前最关键的当然是项目的创建&#xff0c;现在的前端工程化使得前端项目的创建也变得越来越复杂&#xff0c;在这里介绍三种从零开始创建 React 项目的方式&#xff0c;分别是 “在浏览器中直接引入”、“使用官方脚手架 create-react-app” 以及 “使用 Webpa…

【React进阶-1】从0搭建一个完整的React项目(入门篇)

这篇文章带领大家从零开始手动撸一个React项目的基础框架&#xff0c;集成React全家桶。万字长文&#xff0c;请各位有足够的时间时再来阅读和学习。 概述 平时工作中一直在用React提供的脚手架工具搭建React项目&#xff0c;一行命令全都搞定&#xff0c;自己只管做需求开发即…

推荐10个不错的React开源项目

1&#xff0c;Kutt.it Kutt是一个现代的URL缩短器&#xff0c;支持自定义域&#xff0c;可以用来缩短网址、管理链接并查看点击率统计信息。Kutt支持自定义域名&#xff0c;设置链接密码和描述&#xff0c;缩短URL的私人统计信息&#xff0c;查看、编辑、删除和管理链接&#…

Github上8个很棒的React项目

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。…

MySQL 数据库引擎比较

MyISAM: 优势 – 查询速度快 – 数据和索引压缩 问题 – 表级锁 – 数据丢失 InnoDB: 优势 – 行级锁 – 事务支持 – 数据安全 问题 – 数据文件庞大 – 启动慢 – 不支持FULLTEXT索引 比较:

数据库_mysql数据库引擎_数据库索引

文章目录 前言一、MySql数据库引擎1.1、数据库引擎任务1.2、常用的数据库引擎1.2.1、InnoDB存储引擎页主要部分 InnoDB的几个变量 1.2.2、MyISAM存储引擎1.3 、存储引擎设置1.4、如何选择存储引擎 二、索引的数据结构2.1、什么是索引2.2、索引有什么用2.3、优点和缺点2.4 为什么…

【Mysql】数据库引擎

引擎 存储引擎数据库引擎数据库引擎的定义数据库引擎的任务mySql引擎的类别ISAM引擎MyISAM引擎Heap引擎InnoDB引擎InnoDB与MyISAM对比 存储引擎 MySQL常见的两种存储引擎&#xff1a;MyISAM和InnoDB 数据库引擎 数据库引擎的定义 访问数据库时&#xff0c;通过数据库引擎访…

mysql之数据库引擎

一&#xff1a;引擎概述 1&#xff0c;为什么要合理选择数据库存储引擎&#xff1f; MySQL中的数据用各种不同的技术存储在文件&#xff08;或者内存&#xff09;中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过…