webpack5搭建react框架-生产环境配置

这篇具有很好参考价值的文章主要介绍了webpack5搭建react框架-生产环境配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

webpack5配置react基础生产环境

一、前言

在项目构建时不同的环境下会有不同配置,在前面文章中已经使用webpack5配置好了基础环境和开发环境,但是在生产环境时有些配置和开发环境是不需要的,有些是可以在优化的,所以下面继续生产环境的配置。

二、生产环境配置

1、添加生产环境基础配置

首先我们需要在已经创建好的文件webpack.prod.js进行生产环境独有的配置,然后在引入生产环境和开发环境公用的基础配置。
修改webpack.prod.js文件,添加生产环境的基础配置

// webpack.prod.js
const { resolve } = require('./tools');
const { merge } = require('webpack-merge'); // 引入合并方法
const baseConfig = require('./webpack.base'); // 引入基础配置

module.exports = merge(baseConfig, {
  mode: 'production', // 设置模式为production
})

然后修改package.json文件下的build打包指令,将生产环境打包文件指向config/webpack.prod.js

  // package.json
  "scripts": {
    "build": "webpack --config config/webpack.prod.js",
  },

执行 npm run build 命令打包,此时react-refresh/babel会报错因为热更新插件在生产环境的时候应该禁用,所以我们先把他注释掉在执行打包命令,此时最最基础的生产环境配置就完成了。

webpack5搭建react框架-生产环境配置
webpack5搭建react框架-生产环境配置

2、安装Live Server 插件查看效果

上面完成了生产环境最基础的配置,也成功打包,但是不知道打包后的代码在加载的时候是不是有问题,所以需要借助第三方的服务插件查看打包后的页面效果

在vscode插件商店安装Live Server 插件

webpack5搭建react框架-生产环境配置

然后修改Live Server 的root地址为dist,这样我们就可以直接加载打包后的资源

webpack5搭建react框架-生产环境配置
webpack5搭建react框架-生产环境配置

修改好配置后,鼠标右键选择index.html文件选择使用Live Server打开此时就可以直接查看打包效果

webpack5搭建react框架-生产环境配置

3、添加环境变量

在打包的时候我们需要区分开发环境和生产环境(如上面热更新插件的使用),在不通用的配置下我们可以通过配置文件的拆分实现,在通用配置的时候我们就需要在执行打包命令时注入来实现

使用 cross-env 依赖库来注入环境变量,安装cross-env

npm i cross-env -D

修改package.json 文件下打包指令

  // package.json
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --config config/webpack.prod.js",
    "dev": "cross-env NODE_ENV=development webpack-dev-server -c config/webpack.dev.js"
  },

然后在webpack.base.js 文件下添加打印

console.log(process.env.NODE_ENV, 1111111111);

分别执行npm run build 和npm run dev查看变量打印的值
webpack5搭建react框架-生产环境配置
webpack5搭建react框架-生产环境配置

上面成功注入了在打包过程中环境变量,有时候我们的项目也需要业务中全局变量这个时候可以使用webpack中DefinePlugin插件实现

修改webpack.base.js 文件增加业务中全局变量插件配置

// webpack.base.js
const webpack = require('webpack');

module.exports = {
  plugins: [
    new webpack.DefinePlugin({ // 调用插件
      'process.env': {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV),
      },
    }),
  ]
}

4、根据变量配置插件

添加完环境变量后首先根据环境变量去处理不同插件和loader的配置

首先提取出一个判断生产环境的函数,修改config/tools.js文件

// tools.js
function isProd() {
  return process.env.NODE_ENV === 'production';
}

module.exports = {
  isProd
};

修改babel.config.js文件根据变量处理热更新插件

// babel.config.js
const { isProd } = require('./config/tools');

module.exports = {
  plugins: [
    !isProd() && require.resolve('react-refresh/babel')
  ].filter(Boolean)
}

此时在执行npm run build指令进行打包正常不在报错。

在开发环境我们处理css文件时使用style-loader将解析后的css插入到head标签中进行加载方便调试和样式热替换,在生产环境中我们会将css抽离出单独的文件资源并引入使用可以利用缓存配置。下面使用mini-css-extract-plugin插件完成

// 安装
npm i mini-css-extract-plugin -D

修改webpack.base.js文件,生产环境下使用mini-css-extract-plugin插件loader开发环境下还使用style-loader

// webpack.base.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 引入抽离css插件
const { isProd } = require('./tools');

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          // 生产环境下使用MiniCssExtractPlugin.loader
          isProd() ? MiniCssExtractPlugin.loader : 'style-loader',
          'css-loader',
        ]
      },
      // 当使用多个loader处理模块时,use为数组格式,并且loader的执行顺序为从下到上,从后往前。
      {
        test: /\.less$/,
        use: [
          isProd() ? MiniCssExtractPlugin.loader : 'style-loader',
          'css-loader',
          'less-loader'
        ],
        include: resolve("src"),
      },
    ]
  },
}

修改webpack.prod.js文件,进行mini-css-extract-plugin插件调用并设置抽离出css文件名等

// webpack.prod.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 引入抽离css插件

module.exports = merge(baseConfig, {
  plugins: [
    // 调用抽离插件
    new MiniCssExtractPlugin({
      // 抽离后的资源名称和存放路径
      filename: 'static/css/[name].[contenthash:8].css',
      // 非入口的 chunk 文件名称
      chunkFilename: 'static/css/[name].[contenthash:8].css',
    })
  ]
})

执行npm run build 打包命令,查看live-server上的项目效果
webpack5搭建react框架-生产环境配置
5、代码压缩

上面css代码已经被抽离出单独文件并且以资源的方式日引入使用,但是这时候我们看dist目录下已经打包好的css文件里面的内容没有被压缩还是正常展示,在生产环境上加载资源的大小也影响加载性能。下面我们使用css-minimizer-webpack-plugin插件进行压缩css文件(也可以使用optimize-css-assets-webpack-plugin)

安装

npm install css-minimizer-webpack-plugin --save-dev

修改webpack.prod.js文件,进行css-minimizer-webpack-plugin插件的调用

// webpack.prod.js
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); // 引入css压缩插件

module.exports = merge(baseConfig, {
  optimization: {
    minimizer: [
      new CssMinimizerPlugin(),
    ],
  },
})

然后执行npm run build打包命令,查看打包后的css文件是否压缩和页面是否加载正常

webpack5搭建react框架-生产环境配置

css代码成功压缩后,下面来配置js代码压缩,其实当webpack设置模式为production时js文件的代码会自动进行压缩,但是因为我们上面配置optimization.minimizer后这个压缩就失效了,所以需要我们再次安装terser-webpack-plugin插件调用即可

npm install terser-webpack-plugin --save-dev

修改webpack.prod.js文件,调用terser-webpack-plugin插件

// webpack.prod.js
const TerserPlugin = require("terser-webpack-plugin"); // 引入js压缩插件

module.exports = merge(baseConfig, {
  optimization: {
    minimizer: [
      new TerserPlugin({
        // 传入删除注释配置
        terserOptions: {
          format: {
            comments: false,
          },
        },
        extractComments: false,
      })
    ],
  },
})

再次执行npm run build命令查看打包后的文件和页面效果是否正常即可。

三、结语

使用webpack5配置react的生产环境的基础也完成了,但是还有许多可以优化的细节,后面继续将可以优化的地方加进来。文章来源地址https://www.toymoban.com/news/detail-412029.html

到了这里,关于webpack5搭建react框架-生产环境配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ❤ React18 环境搭建项目与运行(地址已经放Gitee开源--新体系为webpack搭建)

    ❤ React18 环境搭建项目与运行(地址已经放Gitee开源--新体系为webpack搭建)

    记得给个star呀伙伴 Github(https://github.com/NexusLin/NexusReact) Gitee(https://gitee.com/NexusLinNoa/NexusReact) 环境介绍 1、检查本地环境 node版本 18.17.0 检查node和npm环境 node -v npm -v 2、安装yarn npm install -g yarn yarn --version 3、创建一个新的React项目 npx create-react-app ltbreact 4、进入并运行项目

    2024年04月13日
    浏览(8)
  • Webpack5 搭建Vue项目(进阶版)

    提示:中间隔了好长时间,我胡汉三又回来继续更新了!!!😂😂😂 提示:文章涉及的一些内容仅供参考: 大多数情况下,大家在项目开发的过程中,基本很少去说让开发人员去自助的搭建一个Vue项目。 基本都是使用现成的一些模版项目,直接在上面进行一个二次的开发

    2024年02月09日
    浏览(10)
  • webpack5高级配置

    webpack5高级配置

    注意:webpack5基本配置只是打包产出一个html文件 ,想要产出多个html就需要进行过入口的配置 webpack.common.js 注意:公共文件中的入口需要引入两个js文件  webpack.prod.js 注意:输出的时候利用[name]根据输入的文件名来确定导出的文件名称! webpack.common.js 注意:针对多个html文件

    2024年02月15日
    浏览(18)
  • Webpack5入门到原理20:Vue 脚手架搭建

    package.json .eslintrc.js babel.config.js

    2024年01月24日
    浏览(25)
  • Webpack5新手入门简单配置

    Webpack5新手入门简单配置

    yarn init -y   yarn add -D webpack@5.75.0 webpack-cli@5.0.0 说明:写入下面的一句话 说明:如果没有安装webpack脚手架就不能执行yarn webpack(webpack-cli) yarn webpack  说明:为yarn webpack起别名  yarn build 说明:注释写在了代码里面了

    2024年02月14日
    浏览(11)
  • Webpack5入门到原理3:基本配置

    在开始使用 Webpack 之前,我们需要对 Webpack 的配置有一定的认识。 entry(入口) 指示 Webpack 从哪个文件开始打包 output(输出) 指示 Webpack 打包完的文件输出到哪里去,如何命名等 loader(加载器) webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析

    2024年01月20日
    浏览(25)
  • 【快速搞定Webpack5】基本配置及开发模式介绍(二)

    【快速搞定Webpack5】基本配置及开发模式介绍(二)

    在开始使用 webpack 之前么,我们需要对 Webpack 的配置有一定的认识。 1. enty(入口) 指示 webpack 从哪个文件开始打包 2. output(输出) 指示 webpack 打包完的文件输出到哪里去,如何命名等 3. loader(加载器) webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader 、 webp

    2024年02月21日
    浏览(8)
  • webpack与vue-cli合并配置,打包生产环境代码时如何删除所有的console.log、代码注释和debugger

    webpack与vue-cli合并配置,打包生产环境代码时如何删除所有的console.log、代码注释和debugger

    本文基于vue-cli 5.0.0,webpack 5.0,TerserWebpackPlugin 最近公司项目开发上线后,发现控制台有很多当时测试时打印的信息。但是如果手动删除然后打包的话工作量太大,而且不利于以后的维护和debugger。所有必须通过webpack打包时自动帮我们删除console和注释。 第一步上网找到webpack关于

    2024年02月04日
    浏览(40)
  • webpack5零基础入门-2wepack配置项的了解

    webpack5零基础入门-2wepack配置项的了解

    在使用webpack之前,我们需要对webpack的配置项有一定的认识。 1.entry(入口) 指示webpack从哪个文件开始打包 2.output (输出) 指示webpack打包完的文件输出到哪里,如何命令等 3.loader(加载器) webpack本身只能处理js、JSON等资源,其他资源需要接触loader,webpack才能解析 4.plugins(插件)

    2024年03月10日
    浏览(8)
  • 《基于 Vue 组件库 的 Webpack5 配置》2.模块规则 module.rule

    配置 module.rules ,创建模块时,匹配请求的规则数组; 可参考 webpack5 指南-管理资源; vue 可参考上述配置; js 使用 webpack babel-loader; css 参考 webpack 加载 CSS。注意 style-loader 和 vue-style-loader 选一个即可,两者的功能基本一致,只是 vue-style-loader 可用于服务端渲染 SSR; stylus

    2024年02月11日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包