Webpack 核心概念

news2024/11/24 8:37:18

文章目录

  • Webpack 核心概念
    • 概述
    • 安装webpack
    • 简单使用
      • 配置webpack.config.js
      • 配置package.json
      • 打包
    • 核心概念
      • mode
      • entry 和 output
        • entry配置说明
        • output配置说明
        • 配置单入口
        • 配置多入口
      • loader
        • 安装babel、babel-loader、core-js
        • 配置.babelrc
        • 配置webpack.config.js
        • 配置package.json
        • 编写源代码
        • 编译源代码
      • plugins
        • 安装html-webpack-plugin
        • HTMLWebpackPlugin配置说明
        • 配置单入口
        • 配置多入口

Webpack 核心概念

概述

Webpack 是一个现代化的静态资源打包工具,它能够将多个静态资源(例如:JavaScript、CSS、图片等)打包成一个或多个文件,使用的是类似于模块化的方式进行开发。

它不仅可以将多个小文件打包成一个大文件,还可以对这些文件进行进一步的优化(例如:代码压缩、混淆、按需加载等),以便减少用户的等待时间,提高网站性能。

Webpack 支持大量的插件和 Loader,用于解决各种各样的问题。例如:可以使用 babel-loader 来处理 ES6 语法;使用 css-loader 和 style-loader 来处理 CSS 文件;使用 file-loader 和 url-loader 来处理图片和其他文件等。

Webpack 的配置文件 webpack.config.js 提供了丰富的配置选项,用于自定义开发过程,比如定义 entry(入口文件)和 output(出口文件);对多个文件进行代码分割;定义 loaders 和 plugins 等。

官方文档

安装webpack

执行命令:

npm install --save-dev webpack-cli webpack

简单使用

配置webpack.config.js

新建 webpack.config.js 文件,并写入:

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
};

配置package.json

{
  "name": "webpack_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack --config webpack.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.82.1",
    "webpack-cli": "^5.1.1"
  }
}

打包

执行命令:

npm run webpack

打包完后目录结构如下:

在这里插入图片描述

核心概念

mode

  • development:开发模式,会开启更加详细的调试信息和提示,同时也可以增加对开发阶段的注重点,例如热更新等。
  • production:生产模式,针对代码做各种优化,例如压缩js代码、去掉未使用的代码、代码分离等。
  • none:默认值。

entry 和 output

  • entry 表示 Webpack 构建的入口文件,也就是 Webpack 从哪个文件开始打包。
  • output 表示 Webpack 构建生成的文件输出路径和文件名。

entry配置说明

  • entry可以是字符串,也可以是对象。如果是字符串表示程序的入口;如果是对象可以指定多个入口。

output配置说明

  • filename:输出文件名称。
    • 可以使用占位符,如:[name]、[id]、[hash]表示文件名、id、hash值。
  • path:输出的绝对路径。

配置单入口

配置webpack.config.js:

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
};

在这里插入图片描述

配置多入口

配置webpack.config.js:

const path = require("path");

module.exports = {
  mode: "development",
  entry: {
    main: "./src/index.js",
    search: "./src/search.js",
  },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js",
  },
};

在这里插入图片描述

loader

在 Webpack 中,Loader 和 Plugin 都是用于加强其打包功能的机制,但它们的作用和用法有所不同。

  • Loader:用于将模块的原始源代码转换成 Webpack 可以处理的有效模块。(比如将 ES6/ES7/JSX 等语法转译成 ES5)。每个 Loader 只负责单一的转换过程,而多个 Loader 可以串联使用,形成一个 Loader 链(Webpack 根据 Loader 链引用 Loader)。常见的 Loader 有 babel-loaderstyle-loadercss-loader 等。
  • Plugin:通过在构建流程的不同阶段 hook 功能实现对代码的加工或操作。(比如生成 HTML 文件、压缩代码等)。Plugin 可以在整个 Webpack 构建周期内挂载事件钩子,用于监听 Webpack 并可修改其内部的参数和结果,进而对打包后的数据进行加工处理。常见的 Plugin 有 HtmlWebpackPluginUglifyJsPluginclean-webpack-plugin 等。

这里以babel-loader为例子。

安装babel、babel-loader、core-js

//安装webpack
npm install --save-dev webpack-cli webpack 
//安装babel
npm install --save-dev @babel/core @babel/preset-env
//安装babel-loader
npm install --save-dev babel-loader
//安装core-js
npm install --save-dev core-js
  • babel是JavaScript编译器,用于将ES6+代码转为低版本的JavaScript代码。
  • babel-loader是webpack的加载器。
  • core-js是用于编译新增API的。

配置.babelrc

新建 .babelrc 文件,并写入:

{
  "presets": ["@babel/preset-env"]
}

配置webpack.config.js

新建 webpack.config.js 文件,并写入:

const path = require('path');

module.exports = {
  mode: 'development',
  entry: {
    index: './src/index.js'
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
      	// 检查文件类型
        test: /\.js$/,
        // 排除文件
        exclude: /node_modules/,
        // 使用指定loader
        loader: 'babel-loader'
      }
    ]
  }
};

配置package.json

"scripts": {
	"webpack": "webpack --config webpack.config.js"
},

编写源代码

新建 src 文件夹,在其中写入 index.js 文件:

import 'core-js/stable';

let name = 'Alex';
const age = 18;
console.log(name, age);

const add = (x, y) => x + y;
console.log(add(1, 1));

new Promise((resolve, reject) => {
  resolve('成功');
}).then(value => {
  console.log(value);
});

console.log(Array.from([1, 2]));

class Person {
  constructor(name, age) {
    Object.assign(this, { name, age });
  }
}
new Person('Alex', 18);

编译源代码

执行命令:

npm run webpack

编译完成后如下:

在这里插入图片描述

plugins

安装html-webpack-plugin

npm install --save-dev html-webpack-plugin

HTMLWebpackPlugin配置说明

  • template:指定HTML模板文件位置。
  • filename:生成HTML文件名。
  • chunks:指定需要注入的文件。
  • minify:对HTML文件进行压缩。
  • hash:为生成的HTML文件名添加hash值。
  • title:指定HTML的title。
  • meta:指定HTML的meta标签。
  • favicon:指定HTML的favicon。

配置单入口

新建 webpack.config.js 文件,并写入:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  entry: {
    index: "./src/index.js",
  },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js",
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

编写源代码

新建 index.htmlsrc/index.js 文件。

编译源代码

执行命令:

npm run webpack

编译完成目录如下:

在这里插入图片描述

配置多入口

配置 webpack.config.js 文件:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  entry: {
    index: "./src/index.js",
    search: "./src/search.js",
  },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js",
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
      filename: "index.html",
      chunks: ["index"],
      minify: {
        // 删除html中的注释
        removeComments: true,
        // 删除html中空格
        collapseWhitespace: true,
        // 删除html中的属性值双引号
        removeAttributeQuotes: true,
      },
    }),
    new HtmlWebpackPlugin({
      template: "./search.html",
      filename: "search.html",
      chunks: ["search"],
    }),
  ],
};

在这里插入图片描述

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

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

相关文章

【Linux】9. 习题①

2022-09-17_Linux环境与版本 1. 命令拓展(了解) linux查看cpu占用的命令是什么? A.top B.netstat C.free D.df 【答案解析】A 2022-09-24_Linux环境与版本 2. 命令拓展(了解) 以下哪个命令输出Linux内核的版本信息: A.uname -r B.vmstat C.sar D.sta…

wms仓库管理对企业的重要性

一、什么是wms仓库管理? WMS是仓库管理系统的缩写,它提供了一个可视化、智能化的平台,帮助公司进行仓库作业的管理和优化。WMS系统可以支持各种类型的仓库,包括零件、分销、批发、跨境电商等等,并提供多种功能&#xf…

如何查找下载外文文献,超强外文文献检索网站排名

英文文献哪里找,下面小编给大家推荐几个超强英文文献下载网站,推荐排名如下: 第4名:sci-hub 这个网站很多科研人都知道,优点是可以免费下载英文文献,缺点是网站不太稳定经常换域名,而且需要你明…

Zoho Desk获G2“2023年优秀软件”称号

备受瞩目的G2年度优秀软件评选结果终于在近期公布了。该奖项旨在表彰过去一年,在软件行业有突出亮点的厂商和产品。在今年的评选中,除了坚持过往满意度、市场占有率等评选维度,额外新增了英国、法国及德国三个地区的产品名单,还增…

5年测试被裁,去面试差点被问哭了······

我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事软件测试已经5年了,也点点点了五年,每天都是重复的工作&…

使用遗传算法解决一维下料问题(一、实现思路分析)

目录 一、前言 二、概念 三、术语定义 四、问题描述 五、实现思路 1、遗传算法 2、一维下料和遗传算法结合 六、下文预告 一、前言 三年前我就折腾过一维下料问题了,当时查遍百度、谷歌,阅尽硕博论文,最终采用自研算法解决了一维下料…

天津值得信赖的python培训哪家好

近些年越来越多人涌入了互联网大厂,许多人选择去培训机构系统的学习Python,那么好的Python培训机构的标准是什么样的呢?我们来一点点说。 一、为什么要学python python是目前大火的的编程语言之一。至于为什么火,不名思意&#…

【Android】小米手机 Root全攻略:轻松获取手机最高权限

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ 备份手机资源小米云服务小米助手备份方式 2️⃣ 解锁BL开启解锁等168个小时(七天)miflash_unlock解锁设备 3️⃣ 获取并安装MIUI完整包4️⃣ 刷机包解包,获取boot.img解压MIUI安装包payload…

C++ | std::tuple

std::tuple 文章目录 std::tuple成员函数及非成员函数模板参数成员函数Non-member functions非成员函数辅助类 构造函数获取元祖元素值元素个数元素的类型Reference 类模板 std::tuple 是不同类型值的固定大小集合。 它是 std::pair 的泛化。 可以当做一个结构体使用 ,不需要创…

【ChatGPT】科技革命促生互联网时代 ChatGPT浪潮打乱时代布局 人工智能新时代下的发展前景

目录 科技革命促生互联网时代 科技进步伴随着大国崛起 科技革命的发展 互联网时代的到来 ChatGPT浪潮来袭 资本市场当前的热潮 人工智能新时代下我们何去何从 开放注册两个月用户数破亿,ChatGPT的爆火也标志着时代的浪潮将要来袭,由科技革命促生的…

C语言200行代码实现简易三子棋

前言 三子棋应该是是我们最早接触到的棋类游戏,用C语言实现三子棋对初学者来说是一种不错的锻炼 编写三子棋只需要用到数组、函数和生成随机数的知识,所以比较适合成为编程学习者编写的第一个小游戏。 一.代码实现 第一部分是源码复制就可以使用&…

WiFi(Wireless Fidelity)基础(六)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

未面试蓄力,redis肝起来

目录 1、为什么要使用Redis做缓存?2、为什么Redis单线程模型效率也能那么高?3、Redis6.0为什么要引入多线程呢?4、Redis常见数据结构以及使用场景字符串(String)哈希(Hash)列表(list)集合&#…

【前端提效】--Chrome浏览器开发者工具 DevTools 使用技巧

介绍一下 DevTools 的一些好用的技巧,它能够很好地帮助你提高生产力和解决问题的能力。 1、打开命令行 或者使用:快捷键 Ctrl Shift P (Mac: ⌘ Shift P ) 命令行可以做很多事情,包括但不限于截图、更换主题等 2、控制 DevT…

Inno Setup Compiler的安装和使用详解

安装:官网最新下载最新版 最新版不支持中文哈,安装的时候直接选英文就好 安装注意事项:在安装过程中有一个 询问是否要 安装一个加密版本的(可根据自己的需求挑选–我就没有) 使用: 1.打开应用程序进入到…

【微信小程序】微信小程序的接口调入 获取太阳码 根据返回值的类型进行接收,微信接口可能直接返回图片,也可能返回一个错误信息的json,同时兼容处理这两种情况

目录 事件起因环境和工具操作过程解决办法遇到的一点问题结束语 事件起因 在开发一个关于微信小程序的过程中,有一个这样的需求,要求生成微信小程序的太阳码,然而这个东西的请求方式我们是这样的:我作为后端服务去请求这个太阳码…

【MFAC】基于紧格式动态线性化的无模型自适应控制(Matlab代码)

例题来源:侯忠生教授的《无模型自适应控制:理论与应用》(2013年科学出版社)。 👉对应书本 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC) 例题4.1 题目要求 matlab代码 clc; clear al…

ASEMI代理ADXL345BCCZ-RL7原装ADI车规级ADXL345BCCZ-RL7

编辑:ll ASEMI代理ADXL345BCCZ-RL7原装ADI车规级ADXL345BCCZ-RL7 型号:ADXL345BCCZ-RL7 品牌:ADI /亚德诺 封装:LGA-14 批号:2023 安装类型:表面贴装型 引脚数量:14 工作温度:-55C~105C…

HTTPS连接建立过程

目录 前言什么是HTTPSHTTPS的作用 TLS建立连接过程1、TCP三次握手2、Client Hello3、Sever Hello4、校验数字证书5、客户端回应6、服务器回应7、TCP四次挥手 前言 什么是HTTPS HTTPS,Hyper Text Transfer Protocol over SecureSocket Layer,超文本传输…

「自动化」聊起来简单,做起来难 | 谈效风生

第4期:“自动化”聊起来简单,做起来难 在上一期《如何找到现有研发体系的「内耗问题」?》中,我们聊了评估现有研发体系,正确的找到“体系内耗问题”,是改变研发体系的第一步。本期我们继续聊下一个关键点就是研发体系…