Webpack打包

Webpack是 JS 静态打包神器,通过内部组件进行一系列操作,对前端代码进行替换、转义、JS浏览器兼容性等处理,最终生成前端应用所需文件包括 Html、JS和 CSS。Webpack主要以下几部分组成,这些配置都可以定义在webpack.config.js,loaders 和 plugins 需要npm install 进行安装。

  1. Entry:入口文件定义,通过入口文件最终生成应用的依赖关系,从而确定项目所需要打包的文件。
module.exports = {entry: './path/to/my/entry/file.js',
};
  1. Output:结果文件,根据从入口生成的依赖关系,最终打包成结果文件,这个文件最终会被引用到 html 文件中。
const path = require('path');module.exports = {entry: './path/to/my/entry/file.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'my-first-webpack.bundle.js',},
};
  1. Loaders:原生的webpack 只认识 JS 文件,如果想用其他格式的文件,就需要的通过 loader 文件进行转换,例如 vue、css 等。点击可以查看官方支持的 loader 列表:
const path = require('path');module.exports = {output: {filename: 'my-first-webpack.bundle.js',},module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},};

4.Plugins:loaders 可以转换文件,plugins 比 loaders 更强大,通过Tapable类库,采用添加 hook的方式对 webpack 最终生成的代码进行增强, 例如 compile、run 阶段的 hook。查看官方支持的插件列表

const HtmlWebpackPlugin = require('html-webpack-plugin');const webpack = require('webpack'); //to access built-in pluginsmodule.exports = {module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

5.Mode:支持 production、development,这样可以对不同的环境进行不同的打包处理,例如,在 development 时候不需要混淆 JS

module.exports = {mode: 'production',
};

6.Browser Compatibility: webpack默认支持版本高于 IE8 的浏览器,这个足够用了,现在 IE 已经淘汰了,出了特殊需要。生产环境不需要。

webpack 例子

这部分,我们做一个简单的webpack例子,主要看看 loaders,plugins都是怎么用的,首先创建有个 webpack 的项目:

mkdir webpack-demo
cd webpack-demo
npm init -y
npm install webpack webpack-cli --save-dev

在 JS 中使用 css,需要通过 loader 将 css载入到我们应用当中,安装 Loader

npm install --save-dev style-loader css-loader

把对应入口文件和和 html 创建好

index.js
import './index.css';
function component() {
const element = document.createElement('div');
// Lodash, currently included via a script, is required for this line to work
element.innerHTML = 'hello';
element.classList.add('test');
return element;
}
document.body.appendChild(component());
index.html 文件放到 dist 目录下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
index.css
.test{
width: 100px;
height: 100px;
margin: 10px;
background-color: aliceblue;
border-radius: 50%;
}
webpack.config.js
const path = require('path');module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
],
},
};

命令行执行 npx webpack,通过浏览器查看结果:

添加 HtmlWebpackPlugin,这个插件的作用是自动生成 html 文件,首先安装plugins

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

修改配置文件,引入并添加配置插件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
],
},
plugins: [new HtmlWebpackPlugin()],
};

执行 npx webpack,之前的 index.html 会被覆盖,这个插件主要的作用是如果输出文件名有变化例如添加 hash,这是就要去修改引入 JS。

Webpack 功能很多,都是通过 loader 和 plugin 的方式实现的,可以参考官方文档。

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

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

相关文章

使用DGL实现一个异构图的例子

使用DGL实现一个异构图的例子 异构图 截图的地址&#xff1a; dgl 异构图 相比同构图&#xff0c;异构图里可以有不同类型的节点和边。这些不同类型的节点和边具有独立的ID空间和特征。 例如在下图中&#xff0c;”用户”和”游戏”节点的ID都是从0开始的&#xff0c;而且两种…

代码随想录三刷day41

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣279. 完全平方数二、力扣139. 单词拆分 前言 这篇背包问题总结篇是对背包问题的高度概括&#xff0c;讲最关键的两部&#xff1a;递推公式和遍历顺序&a…

Appium Desktop + Appium Inspector + 模拟器连接

一、环境预备 1.你需要安装好配置好adb,确保可以在命令行直接运行adb指令 2.安装Appium Desktop、Appium Inspector 、 模拟器 二、启动appium 服务 启动后&#xff0c;画面如下&#xff1a; 三、启动模拟器 此时&#xff0c;启动模拟器&#xff0c;打开电脑cmd窗口&#x…

算法设计与分析实验报告c++实现(矩阵链相乘、投资问题、完全背包问题、数字三角形、最小生成树、背包问题)

一、实验目的 1&#xff0e;加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态…

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

一、 编译、安装、配置 busybox 1.1 下载源码 根文件系统是根据busybox来制作的。 下载地址:https://busybox.net/downloads/。 这里就以1.36.1版本为例进行编译安装介绍: 注意:编译linux内核与文件系统中的所有程序要使用相同的交叉编译器。 下载完成后解压: mkdir …

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

vue3: 报错ResizeObserver loop completed with undelivered notifications.解决方法

错误提示&#xff1a; 组件重新绘制大小时dev环境出现报错提示&#xff0c;如在VUE3中使用ant-design-vue表格自适应窗口大小时webpack会报错。 常用解决方案有重写ResizeObserver或者时间间隔内限制执行方式&#xff0c;可以设置屏蔽方式跳过提示。 解决办法&#xff1a; 修…

汽车车灯用肖特基二极管,选什么型号好?

肖特基二极管种类繁多&#xff0c;有低压降肖特基二极管、通用型肖特基二极管、快速恢复型肖特基二极管、高功率肖特基二极管、汽车级肖特基二极管等等&#xff0c;其中低压降肖特基二极管和汽车级肖特基二极管是二极管厂家东沃电子的核心优势产品。关于东沃电子推出的低压降肖…

移动硬盘无法打开?别慌!这里有救星!

移动硬盘作为现代生活中重要的数据存储工具&#xff0c;承载着我们大量的文件和数据。然而&#xff0c;有时我们会遇到移动硬盘无法打开的情况&#xff0c;这往往让人焦虑不已。那么&#xff0c;当移动硬盘无法打开时&#xff0c;我们应该如何应对呢&#xff1f; 移动硬盘无法打…

量子城域网系列(五):几种典型的量子密钥分发网络组网结构

在上之前文章中&#xff0c;我们介绍了最基本的点对点量子保密通信网络形式以及组网方案&#xff0c;但是显然在实际的应用中&#xff0c;点对点的通信是比较少的&#xff0c;大多还是需要多个终端进行互联才能构成网络。本文我们就讨论一下几种基础的量子密钥分发网络组网结构…

哈希加密算法

hash的介绍 一&#xff1a;hash的解释&#xff1a; 哈希算法是一种能将不同长度的内容转化为固定长度的输出的算法&#xff0c;也称摘要算法或者散列算法。 二&#xff1a;hash的特点&#xff1a; 1、不同的内容转化的长度固定 2、相同的内容转化的结果一定相同 3、不同的…

软件测试---性能测试

1.常见的性能问题有哪些 如图所示 系统内部以及软件的代码实现 1&#xff0c;资源泄漏&#xff0c;包括内存泄漏。 2&#xff0c;CPU使用率达到100%&#xff0c;系统被锁定等。 3&#xff0c;线程死锁&#xff0c;阻塞等造成系统越来越慢。 4&#xff0c;查询速度慢&#xff0c…

算法练习第17天|104.二叉树的最大深度 、559.N叉树的最大深度

104.二叉树的最大深度 104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 什么是二叉树的深度和高度&#xff1f; 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最大深度…

C语言复习1

1.stdint.h C99库的作用是统一类型别名&#xff0c;例如要定义一个有符号的整数类型&#xff0c;即输入int32_t。 2.位操作 3.宏定义 格式&#xff1a;define 标识符 字符串 标识符&#xff1a;宏定义的名字 字符串&#xff1a;常数&#xff0c;表达式&#xff0c;格式串等 …

入侵检测数据预处理 特征工程 面临的问题

数据预处理 对于分类任务来说,由于原始数据可能存在异常、缺失值以及不同特征的取值范围差 异大等问题,对机器学习会产生影响,因此,在进行机器学习模型训练之前,需要先对数据 进行预处理。数据预处理的主要过程包括数据清洗、去量纲、离散化等。 1.数据清洗 对采集到的数据进行…

记录Python的numpy库的详解

1.数组 list[1,2] 转变成np的形式,转换成对像后&#xff0c;就可以使用很多的np自带的方法了 list1[1,2] anp.array(list1) #a--->array([1, 2]) a.dtype #-->dtype(int32) 2. list1[1,2] ,list2[3.1,4,2],anp.array([list1,list2]) list1,list2[1,2],[3.1,4.2] anp.a…

Element-Ui的Form表单:Label文本两端对齐,且必填项的*不影响布局

1. HTML 结构 首先&#xff0c;确保你的 HTML 或 Vue 模板中有一个 el-form 组件&#xff0c;类似下面这样&#xff1a; <div id"app"><el-form :model"form" label-width"100px"><el-form-item label"用户名">&l…

接口测试框架搭建D22

整体架构和分层设计 run.py 运行测试用例&#xff0c;生成测试报告 test_cases/ 登录用例 注册用例 其他业务用例... data/ 测试数据 libs 第三方插件&#xff0c;比如HTMLTestRunnerNew config config.yaml 静态配置数据 config.py 动态配置数据 reports 测试报告…

Mac搭建Java环境【环境搭建】

Mac搭建Java环境【环境搭建】 1 安装Java SDK 官网地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ 下载dmg&#xff0c;双击之后无脑安装即可。 # 进入 JDK 安装目录 cd /Library/Java/JavaVirtualMachines# 查看文件 ls# 输入 cd ~# 打开环…

代码随想录训练营第三十五期|第天15|二叉树part02|层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode…