Webpack构建工具

news2024/9/22 7:38:51

1 概述

Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。

它的主要作用是将多个松散的模块,包括 JavaScript、CSS、图片、字体等资源,按照指定的规则和依赖关系打包成一个或多个优化后的静态资源文件,以便在浏览器中高效加载和运行。

在这里插入图片描述

2 使用Webpack步骤

  1. 初始化node项目 npm init -y
  2. 下载webpack 的依赖包 npm install webpack webpack-cli --save-dev
  3. 创建 目标index.js src/index.js ,在入口文件中编写需要使用的代码,包括引入相应的模块
  4. 使用webpack 指令,观察打包后生成的文件 .默认是dist/main.js

3 Webpack的配置文件

webpack

webpack的配置文件为webpack.config.js

const path = require('path');

// 这个是webpack构建工具的配置文件 是由node来管理的,因此需要遵循nodejs(CommonJS)的规范。将暴露一个配置对象
module.exports =
{
  // 环境,production[开发模式] development[生产模式] 
  mode: "production",
  entry: './src/my_index.js',
  /*
  入口文件 ,默认是在src/index.js,也可以指定到别的入口文件。不建议修改入口文件【约定优于配置】
   */
  //entry: './path/to/my/entry/file.js',
  // entry: ['./src/1.js', './src/2.js'] //当存在多个入口文件时,也可以配置多个路径,此时entry 是一个数组
  // entry: {
  //   a: "./src/1.js",
  //   b: "./src/2.js"
  // }  //当存在多个入口文件时,也可以配置多个路径,此时entry 是一个对象,对象中可以通过键值对的方式去定义多个入口文件

  /**
   * output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。
   */
  output: {
    // 声明在打包文件时是否先清空输出文件夹下的文件。默认是false 不清空的,这里一般建议设定成清空数据
    clean: true,
    // 声明webpack打包后的文件名称
    filename: 'bundle.js',
    //声明webpack打包的目录 ,需要清楚,这个必须使用绝对路径
    path: path.resolve(__dirname, 'destination')
  },


  /**
   * loader 用于对模块的源代码进行转换。转换成webpack工具能处理的js代码【如css-js 资源文件-js less-js】
   * 在使用其他类型的文件时[非js],需要在入口文件中引入相应的资源.
   * rules 是一个数组对象,每个数组将包含一个源代码处理规则
   * 
   * 以处理css 文件为例
   * 1 需要使用到css-loader style-loader   npm install css-loder css-style-loader --save-dev
   * 
   */
  module: {
    rules: [
      {
        //正则表达式去匹配.css文件 忽略大小写
        test: /\.css$/i,
        //loader 从右到左(或从下到上)地取值(evaluate)/执行(execute)。
        use: ['style-loader', 'css-loader']
      },
      {
        //正则表达式去匹配图片资源
        test: /\.(png|jpg|gif)$/i,
        /**
         * 在 Webpack 中,url-loader 和 file-loader 都用于处理文件资源,特别是图片、字体等文件,但它们的作用稍有不同:
         * url-loader:
         * 当文件大小小于指定的阈值(通过 limit 选项设置)时,它会将文件转换为 Data URL 并嵌入到生成的 JavaScript 或 CSS 代码中(文件size小于设定的值时会转成base64位字符串)。这样可以减少 HTTP 请求数量,提高页面加载性能,尤其对于小文件非常有用。
         * 当文件大小超过阈值时,它的行为类似于 file-loader,将文件输出到指定的目录,并返回文件的 URL 。
         * file-loader:主要用于将文件输出到指定的目录,并返回文件的最终 URL 。
         */
        use: [{
          loader: 'url-loader',
          options: {
            limit: 8192, // 如果图片大小小于 8KB,将其转换为 DataURL 嵌入到代码中,否则单独输出文件
            name: 'images/[name].[ext]' // 输出文件的路径和文件名格式
          }
        }]
      }
    ],
  },
}

4 babel-loader 去转换js

以下是 ES6 规范中的一些主要特性:

let 和 const 关键字:提供了块级作用域的变量声明方式,增强了变量作用域的控制。

箭头函数:一种更简洁的函数定义方式,并且具有词法作用域的 this 值。

模板字符串:使用反引号(`)来定义字符串,可以方便地进行字符串插值。

解构赋值:可以从数组或对象中提取值并将其赋给变量。

默认参数:函数参数可以设置默认值。

剩余参数和扩展运算符:方便处理函数参数和数组/对象的操作。

类和继承:提供了更类似于传统面向对象语言的类的定义和继承机制。

模块:使用 import 和 export 关键字进行模块的导入和导出。

Promise 对象:用于处理异步操作,提供了更清晰的异步编程模型。

为什么需要使用到babel-loader

值得注意的是ES6规范编写的js代码并不适用于一些老的浏览器,所以需要通过一定工具进行代码的转换处理,使得能够兼容不同的浏览器。

这里需要用到babel。这是一个js的编译器,能够将ES6新特性转换到ES5,以保证js的兼容性。

使用步骤

  • 安装babel的相关loader npm install --save-dev babel-loader @babel/core @babel/preset-env

* @babel/core 转换js的核心库
* @babel/preset-env 是一个预设,它会根据目标环境(如浏览器或 Node.js 版本)来确定需要转换哪些新的语言特性。
* babel-loader loader和babel关联起来的工具

  • 配置webpack.config.js
module.exports = {
  mode: 'production',
  module: {
    rules: [
      {
        test: /\.m?js$/,
        //待处理的js文件需要排除的目录
        exclude: /(node_modules|bower_components)/,
        //当需要为loader做详细配置时,use属性是一个对象
        use: {
          //使用的loader
          loader: 'babel-loader',
          //options去配置loader
          options: {
            presets: [
              [
                //转换语言规划,针对浏览器版本来确定转换
                '@babel/preset-env',
                {
                  targets: {
                    //表示支持市场份额大于 1%的浏览器、最近的两个主要版本的浏览器以及ie版本大于8的浏览器。
                    browsers: [
                      ">1%",
                      "last 2 versions",
                      "not ie<=8"
                    ]
                  }
                }
              ]
            ]
          },
        },
      },
    ]
  }
}

5 插件

插件是为了拓展功能的。


// 能够生成一个html 并自动引入打包生成的js
// 引入html-webpack-plugin 模块
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  output: {
    clean: true
  },

  //plugins属性,一个数组,将引入所有需要的插件
  //想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。
  plugins: [new HtmlWebpackPlugin({
    //确定生成的html的标题
    //title: 'html-webpack-plugin 插件的使用',
    //基于模板html来生成新的html.并引入打包后生成的js
    template: './src/template.html',
    // 可选:生成的 HTML 文件的文件名,默认为 'index.html'
    filename: 'y-custom-index.html',
  })],
};

6 webpack 开发服务器

Webpack 的开发服务器(webpack-dev-server)是一个非常有用的工具,用于在开发过程中提供快速的实时重新加载和热模块替换功能。

以下是一些关于 webpack-dev-server 的关键特点和配置要点:

特点:

  1. 实时重新加载:当您保存对代码的更改时,浏览器会自动刷新以显示最新的更改,无需手动刷新页面。
  2. 热模块替换(HMR):对于某些模块的更改,只重新加载更改的模块,而不是整个页面,提供了更流畅的开发体验。
  3. 内置的静态文件服务器:可以直接访问项目中的静态资源,如图片、字体等。

使用步骤

安装webpack-dev-server npm install webpack-dev-server -D

使用webpack serve --open 开启服务器,将自动去访问服务器设定的端口

7 devtool 配置

在 Webpack 配置中,devtool 选项用于控制生成的源映射(Source Map)的类型,以帮助在开发过程中更方便地调试代码。

以下是一些常见的 devtool 选项及其特点:

* eval:速度最快,但生成的源映射质量较低,不太适合复杂的调试。
* cheap-eval-source-map:速度较快,生成的源映射包含行信息,但不包含列信息,适用于大多数情况。
* cheap-module-eval-source-map:类似于 cheap-eval-source-map,但对于模块的处理更准确。
* source-map:生成完整的、准确的源映射,但构建速度较慢,适用于对调试要求非常高的情况。
* inline-source-map:将源映射嵌入到生成的代码中,而不是生成独立的源映射文件。

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

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

相关文章

基于RHEL7系统搭建PXE技术体系

目录 一、kickstart自动化安装脚本制作 1、实验前提 2、安装图形界面并启动&#xff0c;关闭DHCP服务 3、安装图形化生成kickstart自动安装脚本的工具并启动 二、搭建DHCP服务并测试脚本 1、安装dhcp 2、生成配置文件 3、编辑配置文件 三、搭建pxe网络安装环境实现服务…

centos安装maven

1.下载maven 去官网选择自己需要的版本 Maven – Download Apache Maven 复制链接 2.使用wget下载 先切换到opt文件夹 再将复制的链接使用wget下载 因为wget下载速度很慢&#xff0c;所以这里使用https://mirrors.tuna.tsinghua.edu.cn镜像 cd /opt wget https://mirrors.tu…

交易困境如何克服,可以先浏览Anzo Capital 昂首资本官网

是不是经常有这样的交易员&#xff0c;常因感到“我知道得不够多”而在交易中做出不合逻辑的行为。在这种心态下&#xff0c;交易员总想寻找更优秀的交易者、更佳的买卖时机以及更有效的策略。事实上&#xff0c;这类追求往往陷入过多无用信息的泥潭&#xff0c;让人难以甄别哪…

【系统架构设计师】二十五、大数据架构设计理论与实践③

目录 六、大数据架构设计案例分析 6.1 Lambda架构在某网奥运中的大数据应用 6.2 Lambda架构在某网广告平台的应用与演进 6.2.1 第一版架构 6.2.1 第二版架构 6.2.3 第三版架构 6.3 某证券公司大数据系统 6.4 某电商智能决策大数据系统 六、大数据架构设计案例分析 6.…

centos上传工具

yum install lrzsz 安装完成之后 作用是 输入 rz 可以本地上传文件

【生成式人工智能-八-大型语言模型的能力评估】

语言模型的能力评估 评估难度来自哪里输出没办法确定给出选择题本身就没标准答案 评估方法人力用语言模型来评估语言模型语言模型的偏爱 评估语言模型的数据集评估模型的不同能力阅读长文的能力心智测验道德性测试安全性测试 通常情况下我们想到的语言模型能力评估&#xff0c;…

图神经网络实战(18)——消息传播神经网络

图神经网络实战&#xff08;18&#xff09;——消息传播神经网络 0. 前言1. 消息传播神经网络2. 实现 MPNN 框架小结系列链接 0. 前言 我们已经学习了多种图神经网络 (Graph Neural Networks, GNN) 变体&#xff0c;包括图卷积网络 (Graph Convolutional Network, GCN)、图注意…

在macOS平台上通过Jenkins远程打包报错,提示errSecInternalComponent

问题&#xff1a;在macOS平台上通过Jenkins远程打包报错&#xff0c;提示errSecInternalComponent 原因 出现这个问题的主要原因&#xff1a;Jenkins以ssh方式到slave机上&#xff0c;默认是没有账户的&#xff0c;但是访问钥匙串要求必须有用户身份 通过Xcode打包的过程中&am…

Ps:通过 RGB 值计算 HSB 值

在 Photoshop 中&#xff0c;HSB&#xff08;色相、饱和度和明度&#xff09;仅作为表达颜色的一种方式而存在&#xff0c;并不是一种颜色模式。 色相/饱和度命令就是基于色彩三要素进行调色的常用命令。 还有一个与 HSB 相关的滤镜&#xff1a;HSB/HSL 滤镜&#xff0c;用于实…

无人机培训机构推广运营理论技术

一、市场定位与品牌建设 在无人机培训行业的激烈竞争中&#xff0c;精准的市场定位是成功的第一步。首先&#xff0c;需明确目标学员群体&#xff0c;如航拍爱好者、农业植保服务者、应急救援人员或专业无人机操作员等。基于目标群体的需求&#xff0c;构建差异化的品牌形象。…

一个升级的多租户权限管理系统,组件化,模块化,轻耦合,高扩展企业级的应用框架,功能强大(附源码)

前言 在现代软件开发中&#xff0c;多租户权限管理系统是企业级应用中的一个关键组件。然而&#xff0c;现有的一些框架&#xff0c;如RuoYi&#xff0c;虽然提供了一些基本的功能&#xff0c;但在面对更复杂的企业级需求时&#xff0c;如原生的MyBatis使用、复杂的分页处理&a…

【桥接模式】设计模式系列:分离抽象与实现的艺术(构建可扩展性的桥梁)

文章目录 Java设计模式系列之桥接模式&#xff1a;分离抽象与实现1. 引言2. 设计模式简介桥接模式定义桥接模式与其他模式的区别 3. 桥接模式的基本原理模式的核心概念抽象化与实现化的分离实现细节的封装解耦的机制 4. 桥接模式的角色介绍角色介绍UML和时序图代码示例说明 5. …

.Net Core IIS 程序报错 Access to the path c:\\windows\\TEMP\\poifiles is denied

程序运行报错&#xff1a;Access to the path c:\\windows\\TEMP\\poifiles is denied &#xff0c;此错误本文介绍两种解决办法&#xff0c;选择适合你的方法即可&#xff1b;一般.Net程序运行方案二可能比较常用。 解决方案一&#xff1a; 从 IIS 访问文件系统 如果您在浏…

【HarmonyOS NEXT星河版开发学习】小型测试案例09-B站卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 鸿蒙开发中层叠布局通过Stack容器组件实现了强大的页面层叠和位置定位能力。这种布局方式不仅增强了界面的美观性和功能性&#xff0c…

《Advanced RAG》-10-Corrective Retrieval Augmented Generation (CRAG)

摘要 CRAG 设计了一个轻量级检索评估器&#xff0c;用于评估针对特定查询检索到的文档的整体质量&#xff0c;并使用网络搜索作为改进检索结果的辅助工具。CRAG 可与基于 RAG 的各种方法无缝集成&#xff0c;并提供了一个插件式的解决方案。 CRAG 的主要思想是引入一个检索评估…

前端面试宝典【vue篇】【5】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…

Java与Python的跨界融合:打造高效与灵活的编程体验

目录 一、引言 1.1 为什么结合Java与Python 1.2 结合方式概览 二、实现方法详解 2.1 Web服务接口 2.2 命令行调用 三、高级融合方式 3.1 Jython 3.2 GRPC/Protobuf 四、优势与挑战 4.1 优势 4.2 挑战 五、结论 在当今快速发展的软件开发领域&#xff0c;单一编程语…

零售企业中 SRM 系统与开源 AI 智能名片商城系统的协同作用

摘要&#xff1a;本文深入探讨了 SRM 系统在零售企业与上游供应商关系管理中的关键作用&#xff0c;并引入开源 AI 智能名片商城系统&#xff0c;细致分析了两者如何协同助力零售企业优化供应链、提升竞争力。通过阐述 SRM 系统的功能模块及其对零售企业的多方面积极影响&#…

职业教育物联网实验实训室建设应用案例

在万物互联的时代背景下&#xff0c;物联网技术以其强大的连接能力、数据分析与处理能力&#xff0c;正在深刻改变着社会生产和生活的方方面面。在这一背景下&#xff0c;职业教育也迎来了新的发展机遇和挑战。为了满足社会对物联网技术人才的需求&#xff0c;提高职业教育的质…

七夕警示:探索社工库与网络搜索下的个人隐私泄露与保护策略

随着七夕节的脚步日益临近&#xff0c;空气中弥漫着浪漫与温馨的气息。这个充满爱意的节日&#xff0c;我们沉浸在与心爱之人共享甜蜜时光的同时&#xff0c;不应忽视网络安全和个人隐私保护的重要性。在数字化时代&#xff0c;个人信息泄露的风险无处不在&#xff0c;如何在享…