【webpack】初始化

news2024/11/26 5:37:17

webpack

          • 旧项目的问题
          • 下一代构建工具 Vite
      • 主角 :webpack
          • 安装webpack
          • 1,mode的选项
          • 2,使用source map 精准定位错误行数
          • 3,使用watch mode(观察模式),自动运行
          • 4,使用webpack-dev-server工具,自动刷新
      • 自定义webpack配置初始化代码
      • webpack处理资源模块(asset module)
          • asset/resource
          • asset/inline
          • asset/source
          • asset
      • 管理资源(loader)
          • css-loader
          • 抽离style里代码,并压缩
          • 知识点补充,在css里面加载图片资源
          • 知识点补充,加载fonts字体
          • 知识点补充,加载csv,tsv,xml数据
          • 自定义JSON模块parser
      • 使用babel-loader转换js文件
          • regeneratorRuntime插件

旧项目的问题

作用域问题

  • return 抛出赋给变量

如何解决代码拆分问题

  • module.exports()抛出模块
  • require()接受模块

如何让游览器支持node模块

下一代构建工具 Vite

主角 :webpack

  • 它可以帮助我们打包javascript的应用程序,
  • 同时支持es的模块化以及commonjs
  • 可以扩展支持很多的静态资源打包,图片,字体,样式等
  • 只能理解js和json这样的文件
  • 出色的功能:除了引入js还可以使用内置的资源模块

引用千峰教育一个图:
在这里插入图片描述

安装webpack

安1:npm init -y
安2:npm install webpack webpack-cli --save-dev
安3: npm install html-webpack-plugin -D

  • 执行完前两个会产生三个文件,第三个是为了自动引入资源
    在这里插入图片描述
1,mode的选项
  mode: 'none', //不展示编译时候的警告,还可以选择'development'
2,使用source map 精准定位错误行数
  • 当我们游览器报错,点击报错内容时,发现报错的指向不是源文件时候,不好排除错误
 devtool: 'inline-source-map', //可以精准的锁定出错位置行数,并且打包出的文件不再是乱码
3,使用watch mode(观察模式),自动运行
  • 每次编译代码,都需要手动运行npx webpack会显得很麻烦
  • 运行 npx webpack --watch
  • 但还有点问题,现在弄完还需要游览器再刷新一下,如何自动刷新游览器!
4,使用webpack-dev-server工具,自动刷新
  • 安4. npm install webpack-dev-server -D
  • 配置里面添加
 devServer: {
    static: './dist', //需要热模块更新的文件
  },

自定义webpack配置初始化代码

在本地开发环境里安装,所以加-D

// path.resolve(_dirname,'./dist'),获取文件的绝对路径,参数一,代表当前文件的物理路径,参数2是基于这个路径下的文件路径
const path = require('path');
// HtmlWebpackPlugin,可以自动引入资源文件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  // 入口文件的地址
  entry: './src/index.js',
  output: {
    // 指定输出文件的文件名
    filename: 'budle.js',
    // 指定输出路径,这个要设置为绝对路径,:webpack.config.js配置文件中----" dirname " 必须为两个下划线“_ _”,否则打包报错
    path: path.resolve(__dirname, './dist'),
    // 打包前清理上一次无用的打包内容
    clean: true,
  },
  // 不展示编译时候的警告,还可以选择'development'
  mode: 'none',
  // 可以精准的锁定出错位置行数,并且打包出的文件不再是乱码
  devtool: 'inline-source-map',
  plugins: [
    // 创建一个插件的实例对象
    new HtmlWebpackPlugin({
      template: './index.html', // 模板
      filename: 'app.html', // 输出的文件名,
      inject: 'body', // 自定义标签的放置位置,默认在head
    }),
  ],
  //运行路径
  devServer: {
    static: './dist', //需要热模块更新的文件
  },
};

webpack处理资源模块(asset module)

  • 资源模块的类型,称之为asset module type
  • 四种类型
asset/resource
  • 会发送一个单独的文件并导出URL
output: {
    filename: 'budle.js',
    path: path.resolve(_dirname, './dist'), 
    clean: true, 
    // assetModuleFilename: 'images/test.png'//方法2:定义资源模块的输出包名
    //但是,不能每个文件名都叫这个名,所以要根据文件的内容来生成一个哈希的字符串,生成后缀名
    assetModuleFilename: 'images/[contenthash].[ext]', 
  },
moduleS: {
    //加载资源模块
    rules: [
      {
        test: /\.png$/,
        type: 'asset/resource', //资源类型
        generator: {//方法1,优先级高
          filename: 'images/[contenthash][ext]', //修改生成的文件的文件名
        },
      },
    ],
  },
asset/inline
  • 会导出一个资源的Data URL,但不会产生打包文件
  • 一般生成的就是游览器可查看的base64格式的路径
{
      test: /\.svg$/,
      type: 'asset/inline', //资源类型
 },
asset/source
  • 会导出资源的源代码,但不会产生打包文件
{
   test: /\.txt$/,
   type: 'asset/source', //资源类型
 },
asset
  • 会在导出一个Data URL和发送一个单独的文件之间自动进行选择
  • 自动的在resource和inline之间进行选择,小于8kb的文件,将会
    视为inline模块,否则会被视为resource模块类型

在这里插入图片描述

管理资源(loader)

  • 为了解决webpack只能理解js和json这样的文件,理解不了其他文件的问题
  • 支持链式调用且逆加载
css-loader

npm install css-loader -D
npm install style-loader -D //会帮助我们把css放置到页面上

  • 配置一下
{
     test: /\.css$/,
     use: ['style-loader', 'css-loader'],//顺序不能颠倒
},

在这里插入图片描述

  • 想要加载less,sass等这样的css文件
  • npm install less-loader less -D
  • 配置完需要重新启动一下
{
     test: /\.(css|less)$/,
     use: ['style-loader', 'css-loader''less-loader'],//顺序不能颠倒
},
抽离style里代码,并压缩
  • 目前,上面的css和页面在一起
  • 想要将style里面的这些代码抽离出来
  • npm Install mini-css-extract-plugin -D
  • 依赖webpack5环境,接下来开始配置
  • 步骤一:导入
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
//MiniCssExtractPlugin,把css提取到单独的文件中
  • 步骤二:实例化一下

  • 并且可以修改存放文件名
    在这里插入图片描述
    在这里插入图片描述

  • 步骤三:添加loader
    在这里插入图片描述

  • 步骤四:文件打包了,但没有压缩

  • 解决思路

  • npm install css-minimizer-webpack-plugin -D

  • 步骤一:导入

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
//压缩css文件
  • 步骤二:在优化的配置里面配置
    在这里插入图片描述
  • 步骤三:
    在这里插入图片描述
知识点补充,在css里面加载图片资源

在这里插入图片描述

知识点补充,加载fonts字体
  • 像字体这样的其他资源如何可以接收并加载任何文件,然后将其输出到构建目录

  • 步骤一,配置
    在这里插入图片描述

  • 步骤二.
    在这里插入图片描述在这里插入图片描述

知识点补充,加载csv,tsv,xml数据
  • 可以使用csv-loader和xml-loader
  • npm install csv-loader xml-loader -D
    在这里插入图片描述
  • 步骤二:在使用的js文件中引入要使用的文件即可
import Xml from './assets/data.xml';
import Csv from './assets/data.csv';
自定义JSON模块parser
  • 替代特定的webpack loader,可以将任何toml,yaml或json5文件作为JSON模块导入
  • npm install toml yaml json5 -D
    在这里插入图片描述
  • 步骤三,正常引入使用即可
    在这里插入图片描述
    在这里插入图片描述

使用babel-loader转换js文件

  • npm install babel-loader @babel/core @babel/preset-env -D
  • 因为webpack只能做js模块化的打包,并不能转化js里的代码,所以babel-loader转换
  • 将ES6转换成低版本的游览器能够识别的ES代码
  • 注意点;这样写会将nodemodule中的js也编译,所以需要排除一下
  • 使用exclude属性
    引用千峰教育
regeneratorRuntime插件
  • 运行上述babel-loader的项目,发现有报错regeneratorRuntime

  • regeneratorRuntime是webpack打包生成的全局辅助函数,由babel生成,用于兼容async/await的语法
    在这里插入图片描述

  • 最后,修改一下配置
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03_阿里云_配置OSS环境变量

关于aliyunOSS文件上传的系统变量配置 问题引出 在黑马程序员2023新版JavaWeb开发教程教程中,P148Day11-04. 案例-文件上传-阿里云OSS-准备到P150Day11-06. 案例-文件上传-阿里云OSS-集成阿里云给的参考代码已经更新了,需要配置阿里云的用户变量&#…

JavaScript实战:制作一个待办事项列表应用

JavaScript实战:制作一个待办事项列表应用 引言 在本教程中,我们将一步步创建一个简单的待办事项列表应用,这不仅会帮助你学习基本的JavaScript编程概念,还会教会你如何处理事件以及操作DOM。这个项目是面向初学者的&#xff0c…

NFTScan Labs:我们为什么要推出 L2 网络 Mint Blockchain?

发展背景 NFT(非同质化代币)是一种储存在区块链上的加密数据单位,它可以代表身份、合同、权益、声誉、社交关系等独一无二的数字资产。与比特币等加密货币不同,NFT 资产不可互换,每一枚 NFT 都是独一无二的链上资产。N…

力扣题:字符的统计-12.6

力扣题-12.6 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:696. 计数二进制子串 解题思想:先统计连续的0和连续的1的个数,然后进行相加即可(想不到一点) class Solution(object):def countBinaryS…

怎么用电源芯片测试系统测试电源管理芯片的性能?

电源芯片用于电源转换和管理,其性能直接影响着电源管理芯片的工作效率和可靠性,影响电子设备的质量和性能。因此,性能测试是电源芯片测试的重要步骤,用电源芯片测试系统测试其性能,可以确保测试数据及测试结果的准确性…

m1编译xgboost的jar报错

1、编译 cd jvm-package包,然后进行编译mvn install -P libxgboost,java -DskipTests 2、报错信息: 3、解决方法 A、在jvm-packages包下找到xgboost4j中找到pom.xml,如图: B、修改python的额目录或者脚本: C、继续执…

普华永道:国有企业要动态布局和管理供应商资源池

近日,普华永道发布《动态布局和管理供应商资源池,助力国企数字化供应链建设》研究文章中建议:国有企业需要将采购寻源作为供应链管理的起始点,管理供应商资源池,实施供应链数字化转型的发展战略,不仅能解决…

数据分析基础之《matplotlib(4)—柱状图》

一、柱状图绘制 1、柱状图要素 有类别 2、需求:对比每部电影的票房收入 电影数据如下图所示: 3、matplotlib.pyplot.bar(x, height, width0.8, bottomNone, *, aligncenter, dataNone, **kwargs) 说明: x:有几个类别 height&am…

电压放大器可用于什么电路

电压放大器是一种常见的电子器件,其主要功能是放大输入信号的电压幅度。它可以用于多种电路中,下面西安安泰将详细介绍几个典型的应用场景。 首先,电压放大器可以用于音频放大器电路。音频放大器广泛应用于音响设备、电视机、电脑音箱等&…

PDF编辑器免费版有哪些?哪个好用?

日常工作和学习中,普通的PDF的阅读器通常无法进行编辑,更别说逆向导出成为Word、PPT或者Excel了。而且。市场上很多PDF编辑器还要收费。那么问题来了,PDF编辑器免费版有哪些呢?这就给大家安利几款,强烈建议收藏! PDF编辑器免费版一:PDF24 这款编辑器的功能有主要有PDF的合并、…

[MySQL] MySQL中的内置函数

本篇文章主要是对MySQL中常见的内置函数进行了详细解释。例如有日期类函数、字符串类函数、数学类函数等等。希望本篇文章会对你有所帮助。 文章目录 一、日期类函数 1、1 使用详解 1、2 实例演示 二、字符串函数 2、1 使用详解 2、2 实例演示 三、数学函数 四、其他函数 &…

C语言二叉树的基本概念(一)

目录 二叉树 二叉树的分类(目前只谈两种) 满二叉树 完全二叉树 二叉树的性质(其余的可以自己总结) 选择练习 二叉树的存储结构 顺序存储方式 链式存储方式 二叉树 定义:二叉树是一种特殊的树状数据结构&…

为什么伦敦银交易中支撑和阻力位这么重要?

在伦敦银交易中,支撑阻力位是我们做伦敦银技术分析不可缺少的一部分。到底为什么支撑阻力位这么重要呢?下面我们就来讨论一下。 什么才是主要的支撑阻力位?通常来说,前期的高点和低点是主要的支撑阻力位所在的位置。为什么这些位置…

C - 语言->内存函数

目录 系列文章目录 前言 1. memcpy使⽤和模拟实现 1.2 memcpy函数的模拟实现: 2. memmove 使⽤和模拟实现 2.1memmove的模拟实现: 3. memset 函数的使⽤ 4. memcmp 函数的使⽤ 系列文章目录 ✅作者简介:大家好,我是橘橙黄又青&#xff…

如何让软文更具画面感,媒介盒子分享

写软文这种带有销售性质的文案时,总说要有画面感,要有想象空间。只有针对目标用户的感受的设计,要了解用户想的是什么,要用可视化的描述来影响用户的感受,今天媒介盒子就和大家分享:如何让软文更具画面感。…

postgresql从入门到精通 - 第37讲:postgres物理备份和恢复概述

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第37讲&#…

HarmonyOS 开发 Java 与 ArkTS 如何抉择?

本文详细分析 Java 与 ArkTS 在 HarmonyOS 开发过程的区别,力求解答学员的一些困惑。 何为 HarmonyOS? 在讨论语言的差异时,我们先了解下什么是 HarmonyOS。华为官方是这么解释 HarmonyOS 的: “鸿蒙操作系统”特指华为智能终端…

2023本人最全的私有笔记分享:pip的基本命令和使用

23年12月1日最后更新。 选择的命令pip。至少都是在python 3.6以上的。 更多内容见:链接:https://pan.baidu.com/s/19mS5N9XJ_AotF20kUwSA3w?pwdp5kx 提取码:p5kx 3. Pip命令相关: 1、注意:所有的pip在命令窗口执…

网络监控:网络故障告警通知

网络警报是向网络管理员发出的指示,表明设备已达到其设置的阈值或面临任何性能异常,网络警报可以通过不同的渠道通知网络管理员,例如电子邮件、短信、松弛、网络警报等。 通过网络监控警报,可以快速了解网络问题,通过…

如何通过内网穿透实现无公网IP也能远程访问内网的宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔,内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具,适合新手,简单好用。当我们在家里/公司搭建了宝塔,没有公网IP,但是想要在外也可以访问内…