webpack快速基础

文章目录

  • webpack快速基础
    • 1. 概念
      • 1.1 入口
      • 1.2 输出(output)
      • 1.3 loader
      • 1.4 插件(plugin)
    • 2. 建立项目,用于测试功能
      • 2.1 安装webpack,
      • 2.2 创建webpack配置文件,
      • 2.3 配置package.json,运行项目
    • 3. 配置 mode 开发环境
    • 4. 配置 entry 编译入口
    • 5. 配置 output 编译出口
    • 6. 配置加载css

webpack快速基础

1. 概念

webpack是现代JavaScript 静态模块打包工具。在打包时它会从一个或多个入口点构建依赖图。然后将你项目中每个模块生成一个或多个bundles, 生成的均为动态资源。

**依赖图:**每当一个文件依赖另一个文件时,webpack 都会将文件视为直接存在 依赖关系。这使得 webpack 可以获取非代码资源,如 images 或 web 字体等。并会把它们作为 依赖 提供给应用程序。webpack官网说明。

webpack核心概念为:入口、输出、loader、插件、模式。

1.1 入口

顾名思义,指示webpack使用那个模块作为构建依赖图的开始,webpack会将此文件作为入口构建依赖图。

入口可以有一个或多个,默认为 src/index.js, 可以点开webpack源码看一下。

module.exports = {entry: './path/to/my/entry/file.js',// 下面为举例entry: ['src/index.js', 'src/main.js'],entry: {index: 'src/index.js',main: 'src/main.js',},
};

1.2 输出(output)

output 告诉webpack 编译生成的所有bundles,资源文件等输出到那个位置,默认是项目根目录的 dist 文件夹。

const path = require('path');module.exports = {entry: './path/to/my/entry/file.js',output: {path: path.resolve(__dirname, 'dist'), // 配置 output生成坐在的目录filename: 'my-first-webpack.bundle.js', // 配置生成文件后 文件的名字。该文件会放到path文件夹下。},
};

1.3 loader

webpack只能理解JavaScript与json文件,这时webpack自身的能力,其他的一些文件就需要各种各样的loader来理解解析成webpack可以理解的js或json. 以供webpack将这些资源添加到依赖图中。

loader在webpack配置文件的 module -> rules 节点下配置

loader配置中有两个常用属性 test、use

  1. test: 识别出哪些文件会被转换。用正则表达式来匹配
  2. use: 定义出在进行转换时,应该使用哪个 loader, use 后是一个字符串数组,数组内是定要使用的loader, 数组顺序一定要确定,webpack会从后往前依次使用loader来转换代码或资源。

例如:txt文件

const path = require('path');module.exports = {output: {filename: 'my-first-webpack.bundle.js',},module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},
};

1.4 插件(plugin)

loader用于转换某种类型的模块,而插件工作范围更广,例如:打包优化,资源管理,注入环境变量等。

想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建一个插件实例。

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 非常常用的插件,用户生成前端项目的起始页面
const webpack = require('webpack'); // 用于访问内置插件module.exports = {module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],  
};

2. 建立项目,用于测试功能

2.1 安装webpack,

先初始化文件夹的npm,npm init

npm i -D webpack webpack-cli #  我的 "webpack": "^5.90.3", "webpack-cli": "^5.1.4"

2.2 创建webpack配置文件,

根目录创建 webpack.config.js,再根目录创建 src/index.js 文件夹与文件

const { Configuration } = require('webpack');/*** @type { Configuration } 指定配置类型,可帮助代码提示*/
module.exports = {mode: 'development',  // 开发模式entry: './src/index.js', // 程序入口
}

2.3 配置package.json,运行项目

"scripts": {"dev": "webpack --config webpack.config.js"  // 启动脚本 --config 指定webpack启动配置文件
},

src/index.js中写几行代码,运行 dev,查看是否成功,生成的文件到了dist目录下。

3. 配置 mode 开发环境

webpack的mode配置有 development 或 production,

  1. development:开放环境开发过程中使用, process.env.NODE_ENV会是 development
  2. production:正式打包环境,提供了一些混淆等功能process.env.NODE_ENV会是 production

4. 配置 entry 编译入口

入口必须配置,entry就可配置。一般我们就配置一个入口也就够了

entry: './src/index.js'
entry: ['./src/index.js', './src/index-two.js'] // 可以以数组形式配置多个
entry: {  // 已js对象的形式配置,会编译生成已对象属性名为名字的js文件home: './src/index.js', homeTwo: './src/index-two.js'
},

5. 配置 output 编译出口

output: {filename: 'js/[name]-[fullhash:8].js', // 编译输出文件名,前面带 js/:表示生成到js目录下path: path.resolve(__dirname, 'dist'), // 编译输出根目录,上面配置的js目录就会生成到这个目录下clean: true, // 编译是否清理输出目录。删除旧的文件
}

6. 配置加载css

因为纯webpack只处理js文件,所以我们需要依赖各种loader来处理其他文件,处理css需要使用 style-loader css-loader

下载包后配置,都是在webpack配置文件的 module -> rules 下

    module: {rules: [{test: /\.css$/i,  // test通过 正则表达式匹配需要loader的文件use: ['style-loader', 'css-loader'], // use 配置使用的loader,顺序一定要正确。}],},

webpack在使用loader时是按照use配置顺序 从后向前依次处理。

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

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

相关文章

【设计模式】工厂方法模式详解

在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们…

STP生成树——解决二层组网环路

目录 一.二层组网环路 1.广播风暴 2.MAC地址漂移 3.有没有三层环路 二.STP生成树 (1)工作原理 (2)STP概念 1.桥ID(BID) 2.根桥 3.COST 4.RPC 5. Rort ID ——本端 6.BPDU报文 7.PID(Port ID&…

语音识别文字 免费 openai-whisper

语音和别文字 git地址 https://github.com/openai/whisper 简单的测试一下功能 具体使用请访问 git 环境搭建 python 环境 pip install githttps://github.com/openai/whisper.git自行安装 ffmpeg 命令行工具 测试效果 # "/Users/mac/Downloads/aad.mp3" 为本…

ARM-IIC实验

要求 设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警 当湿度比较高时,打开LED1灯,蜂鸣器报警 现象视频 IIC.mp4 代码实现 main.c #include"si7006.h" #include"led.h" #include"f…

IDC:2027年中国网络安全市场规模将超200亿美元

IDC于近日发布了2024年V1版IDC《全球网络安全支出指南》(IDC Worldwide Security Spending Guide)。IDC数据显示,2022年全球网络安全IT总投资规模为1890.1亿美元,并有望在2027年增至3288.8亿美元,五年复合增长率(CAGR)…

若依ruoyi-vue实现excel导入导出

文章目录 Excel注解excel数据导入前端实现后端实现 下载模板前端实现后端实现 excel数据导出前端实现后端实现 自定义标题信息导出用户管理表格新增标题(用户列表)导入表格包含标题处理方式 自定义数据处理器自定义隐藏属性列导入对象的子对象导出对象的…

FakeLocation报虚拟位置服务连接失败,请重启设备再试

虚拟位置服务连接失败,请重启设备再试 最近遇到一个手机软件报的bug“虚拟位置服务连接失败,请重启设备再试” 因为我的实体“虚拟机”已经root,按道理是不可能报这个错的 折腾了2天,终于解决了 原来是这样,安装最新…

龙智亮相2024国际集成电路展览会暨研讨会(IIC Shanghai),分享芯片研发及管理解决方案与技术实践

2024年3月28-29日(周四-周五),上海张江科学会堂,2024国际集成电路展览会暨研讨会(IIC Shanghai 2024)即将盛大开幕。龙智携芯片研发及管理解决方案、最佳实践与案例,以及惊喜大奖在#1A14展位等着…

【C语言】数组和指针

目录 一、&数组名VS数组名 二、数组指针 三、指针数组 四、函数指针 五、const和指针 1、常量指针 六、sizeof和指针、数组 七、strlen和字符数组 八、指针和数组笔试题 1、一维数组 2、字符数组 3、二维数组 一、&数组名VS数组名 //试试这段代码 #includ…

Redis 教程系列之Redis 配置(三)

Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 你可以通过 CONFIG 命令查看或设置配置项。 语法 Redis CONFIG 命令格式如下: redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME 实例 redis 127.0…

C++ 中的 unordered_map 用法文档

当你在C中需要使用哈希表(无序映射)来管理键值对时,unordered_map 是一个非常有用的数据结构。以下是关于 unordered_map 的用法; 1. 概述 unordered_map 是 C STL(标准模板库)中的一个关联容器&#xff…

二刷代码随想录——动态规划day57

文章目录 前言动态规知识点 动规五部曲一、647. 回文子串二、516. 最长回文子序列总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班&#xf…

数据挖掘|数据预处理|基于Python的数据标准化方法

基于Python的数据标准化方法 1. z-score方法2. 极差标准化方法3. 最大绝对值标准化方法 在数据分析之前,通常需要先将数据标准化(Standardization),利用标准化后的数据进行数据分析,以避免属性之间不同度量和取值范围差…

15:00面试,15:06就出来了,问的问题有点变态了

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到3月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降30%…

PTA L2-032 彩虹瓶

彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工…

项目管理-需求分析

项目需求分析是项目管理中非常重要的一环,它涉及到对项目目标的理解、项目范围的界定、项目需求的收集、分析和整理。以下是项目需求分析的一般步骤: 1. 确定项目目标:明确项目的目的和预期成果,确保项目团队对项目目标有共同的认…

基于cnn卷积神经网络的yolov8动物姿态估计识别(训练代码)

往期热门项目大合集: 人体姿态识别(教程代码)-CSDN博客 3D人体姿态估计(教程代码)-CSDN博客 3D目标检测(教程代码)_3d目标检测原理-CSDN博客 交通路标识别(教程&代码)_路标识别项目概述…

【c++】类和对象(二)this指针

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解this指针 目录 1.this指针1.1this指针的引出1.2this指针的特性1.3思考题1.4C语言和C实现Stack的对…

解析option设计模式

解析option设计模式 一、背景二、应用demo三、Gin中的应用 一、背景 有时候一个函数会有很多参数,为了方便函数的使用,我们会给希望给一些参数设定默认值,调用时只需要传与默认值不同的参数即可。因此选项设计模式顾名思义,就是在…

Redis 缓存穿透是什么?如何缓解缓存穿透?

缓存穿透是指在使用缓存技术时,恶意或无效的请求无法从缓存中获取到数据,从而直接落到底层存储系统(如数据库)上,导致频繁地查询底层存储系统,增加系统负载并降低性能。 缓存通常用于存储经常被请求的数据…