【webpack】应用篇

基础应用

      • 代码分离
        • 常用的代码分离方法
          • 方法一:配置入口节点
          • 方法二:防止重复
          • 方法三:动态导入
      • 缓存
          • 原因
          • 解决思路
      • 缓存第三方库
          • 原因
          • 解决思路
      • 将所有js文件单独存放文件夹
      • 拆分开发环境和生产环境配置
        • 公共路径
        • 环境变量和区分环境代码压缩
      • 拆分配置文件
          • 开发环境下,webpack.config.dev.js文件内容
          • 生产环境下,webpack.config.build.js文件内容
      • npm 脚本
          • 关闭性能提示
      • 提取公共配置
      • 合并配置文件
          • 通过 --env来传递环境变量

代码分离

  • 代码分离用于获取更小的打包文件
  • 还可以控制资源加载的优先级
常用的代码分离方法
方法一:配置入口节点
  • 使用entry配置手动地分离代码
  • 问题:如果有多个入口,那么这些多个入口共享的文件会分别在每个包里重复打包
  • 产生如下报错,提示一个出口对应多个入口
    在这里插入图片描述
  • 解决方法,出口写活
  • 这个[name]会自动对应入口文件名
    在这里插入图片描述
  • 展示缺点
  • 类似这个lodash如果在多个入口文件都有引入,到时候打包的时候的出口文件就会多次重复打包这个插件
  • 这样就会造成打完的包体积变大!
    在这里插入图片描述
方法二:防止重复
  • 使用entry dependencies或者通过splitChunksPlugin去重和分离代码
  • entry dependencies,将共用的抽离出来单独打包
    在这里插入图片描述
  • splitChunksPlugin ,实现代码分割,将公共的代码抽离到一个单独的文件
optimization: {splitChunks: {chunks:'all'}},

在这里插入图片描述

方法三:动态导入
  • 通过模块的内联函数调用来分离代码
  • 懒加载,也叫按需加载,在使用的时候加载模块
    在这里插入图片描述
  • 预获取/预加载模块
  • 打出的包看不出区别,但游览器上有区别
  • 这个预获取prefetch是指在首页加载完毕后,网络有空闲的时候,加载我们的math.bundle
    在这里插入图片描述
  • 预加载,效果和懒加载效果差不多,在使用的时候再加载
    在这里插入图片描述

缓存

原因
  • 1,webpack打包我们的模块化应用程序,会生成一个可以部署的dist目录
  • 2,然后webpack把打包好的内容放置在这个dist目录中
  • 3,我们将这个目录放置在serve中,也就是服务器中
  • 4,这样游览器就能访问我们的资源了
  • 5,获取资源比较耗费时间,所以游览器会采取缓存技术
  • 6,通过命中缓存以降低网络流量,使网站加载速度更快
  • 7,但当部署资源的时候,不更改资源的文件名,游览器会认为没有更新,就会使用缓存版本
  • 8,所以,导致,新代码的获取有点困难!
解决思路
  • 1,确保webpack编译生成的文件能够被客户端缓存
  • 2,而在文件发生变化的时候,又能够请求的新的文件
    • 采取命名改变
      在这里插入图片描述

缓存第三方库

原因
  • 第三方库不会频繁修改
解决思路
  • 将第三方库单独vendor chunk文件中
  • 利用client长效缓存机制,命中缓存来消除请求,减少向服务器获取资源,并且还能保证代码一致
    在这里插入图片描述

将所有js文件单独存放文件夹

  • 目的,将打包好的文件打包在一个文件里
    在这里插入图片描述
    在这里插入图片描述

拆分开发环境和生产环境配置

公共路径
  • publicPath配置选项
  • 通过它来指定应用程序中所有资源的基础路径
  • 代码位置
    在这里插入图片描述
  • 实现效果
    在这里插入图片描述
环境变量和区分环境代码压缩
  • 目的:想要消除web.config.js在开发环境和生产环境之间的差异
  • 用户可以设置: npx webpack --env production
  • 在这里插入图片描述
  • 按道理我们可以使用webpack开箱即用的terser那个插件,可以生效的,目前为什么没有生效
  • 原因:之前有写css压缩,配置了这个,terser配置就得单独配置一下
    在这里插入图片描述
  • 安装:npm install terser-webpack-plugin -D
    在这里插入图片描述
  • 因为这个在生产环境压缩,开发环境不执行压缩
  • 然后运行 npx webpack --env production
  • 注意哈:必须 --env production

拆分配置文件

  • 先新建两个文件区分不同环境
    在这里插入图片描述
开发环境下,webpack.config.dev.js文件内容
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {entry: {index: './src/index.js',another: './src/another-module.js',},optimization: {splitChunks: {cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all',},},},},output: {filename: 'scripts/[name].js',//./dist,会使代码打包到config/dist里面//所以为了挪在外层要变成../distpath: path.resolve(__dirname, '../dist'),clean: true,assetModuleFilename: 'images/[name].[contenthash][ext]',},mode: 'development',devtool: 'inline-source-map',plugins: [// 创建一个插件的实例对象new HtmlWebpackPlugin({template: './index.html', // 模板filename: 'app.html', // 输出的文件名,inject: 'body', // 自定义标签的放置位置,默认在head}),],//运行路径devServer: {static: '../dist', //需要热模块更新的文件},
};
  • 使用这个打包:npx webpack -c ./config/webpack.config.dev.js
  • 所以,就会在开发环境下,无域名,js代码无压缩
    在这里插入图片描述
生产环境下,webpack.config.build.js文件内容
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {// 多入口文件的地址entry: {index: './src/index.js',another: './src/another-module.js',},optimization: {//css压缩minimizer: [new CssMinimizerPlugin(), new TerserPlugin()],//查找第三方库并单独打包splitChunks: {cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors', //打包的名字chunks: 'all',},},},},output: {filename: 'scripts/[name].[contenthash].js',path: path.resolve(__dirname, '../dist'),clean: true,assetModuleFilename: 'images/[name].[contenthash][ext]',publicPath: 'http:localhost:8080/',},mode: 'production',plugins: [// 创建一个插件的实例对象new HtmlWebpackPlugin({template: './index.html', // 模板filename: 'app.html', // 输出的文件名,inject: 'body', // 自定义标签的放置位置,默认在head}),],
};
  • 所以,npx webpack -c ./config/webpack.config.build.js
  • 这个命令下,代码会压缩,会带域名
    在这里插入图片描述

npm 脚本

  • 每次打包或者启动服务,都需要在命令行里面输入一长串命令
  • 例如:上面的npx webpack -c./config/webpack.config.build.js这些,很麻烦!
  • 所以配置npm 脚本来简化命令行的输入
    在这里插入图片描述
  • npx 可以省略
    在这里插入图片描述
  • 然后运行npm run start打测试包或者npm run build打正式包即可
关闭性能提示
  • 有时候会有一些包超出的警告
    在这里插入图片描述
    在这里插入图片描述

提取公共配置

  • 我们发现开发环境和生产环境下的配置文件里有大量重复代码
  • 可以手动将重复的代码单独提前到一个文件里
  • 创建 webpack.config.common.js,存放共有的配置
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {// 多入口文件的地址entry: {index: './src/index.js',another: './src/another-module.js',},optimization: {//查找第三方库并单独打包splitChunks: {cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors', //打包的名字chunks: 'all',},},},},output: {path: path.resolve(__dirname, './dist'),clean: true,assetModuleFilename: 'images/[name].[contenthash][ext]',},plugins: [// 创建一个插件的实例对象new HtmlWebpackPlugin({template: './index.html', // 模板filename: 'app.html', // 输出的文件名,inject: 'body', // 自定义标签的放置位置,默认在head}),],
};
  • 删除其余配置文件中和公共配置相同的内容,只保留不同内容
    在这里插入图片描述
    在这里插入图片描述

合并配置文件

  • npm install webpack-merge

在这里插入图片描述

通过 --env来传递环境变量

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十一章总结博客

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission …

C++ 构造函数和析构函数

文章目录 引言构造函数介绍声明和定义构造函数构造函数的使用构造函数与其他类方法的区别默认构造函数析构函数C 11 列表初始化const成员函数 引言 C引入类的目标之一是使用类对象能像使用标准类型一样,要实现这样对目的,就必须提到C的构造函数。如下所…

python 涉及opencv mediapipe知识,眨眼计数 供初学者参考

基本思路 我们知道正面侦测到人脸时,任意一只眼睛水平方向上的两个特征点构成水平距离,上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时,垂直距离与水平距离的比值基本恒定 根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个…

Qt 输入一组数,排序后用柱状图显示

Qt柱状图&#xff0c;需要使用到QChart模块&#xff0c;因此需要在安装Qt时勾选上QChart模块。然后在工程.pro文件中加上 QT charts 参考代码&#xff1a; //MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPushButton…

基于H5“汉函谷关起点新安县旅游信息系统”设计与实现

目 录 摘 要 1 ABSTRACT 2 第1章 绪论 3 1.1 系统开发背景及意义 3 1.2 系统开发的目标 3 第2章 主要开发技术介绍 5 2.1 H5技术介绍 5 2.2 Visual Studio 技术介绍 5 2.3 SQL Server数据库技术介绍 6 第3章 系统分析与设计 7 3.1 可行性分析 7 3.1.1 技术可行性 7 3.1.2 操作…

HL 7 是什么

HL7 指的是一组用于在各种医疗服务提供者所使用之软件应用程序之间&#xff0c;传输临床和管理数据的国际标准。这些标准侧重于应用层&#xff0c;即OSI模型中的“第7层”。 HL7标准由国际标准组织Health Level Seven International制作&#xff0c;并被美国国家标准协会和国际…

智能优化算法应用:基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.静电放电算法4.实验参数设定5.算法结果6.参考…

SAP UI5 walkthrough step2 Bootstrap

我的理解&#xff0c;这就是一个引导指令 1.我们右键打开命令行--执行 ui5 use OpenUI5 2.执行命令&#xff1a;ui5 add sap.ui.core sap.m themelib_sap_horizon 执行完之后&#xff0c;会更新 yaml 文件 3.修改index.html <!DOCTYPE html> <html> <head&…

c++ redis客户端, 带详情输入输出

文章目录 使用方法输入输出解释代码输出 使用方法 g main.cpp ./a.out -h 127.0.0.1 -p 6379 输入 一行内输入 redis 命令 keys* set name get name 等等 redis命令 输出解释 输入redis: redis收到的redis协议的数据 human输入&#xff1a; 你输入的原始字符 redis输出&#xf…

如何搭建废品上门回收小程序

如今&#xff0c;随着环境保护意识的增强&#xff0c;废品的回收和再利用变得越来越重要。为了方便人们进行废品回收&#xff0c;搭建一个废品上门回收的小程序成为了一个不错的选择。本文将介绍如何从零开始搭建一个废品上门回收小程序。 …

智能优化算法应用:基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Cisco Packet Tracer配置命令——交换机篇

交换机VLAN配置 在简单的网络环境中&#xff0c;当交换机配置完端口后&#xff0c;即可直接应用&#xff0c;但若在复杂或规模较大的网络环境中&#xff0c;一般还要进行VLAN的规划&#xff0c;因此在交换机上还需进行 VLAN 的配置。交换机的VLAN配置工作主要有VLAN的建立与删…