webpack快速入门

news2025/1/10 11:55:34

目录

1.概述

1.1.什么是webpack

1.2.loader

2.项目搭建

3.打包js:

4.打包CSS

5.打包图片

6.插件


1.概述

1.1.什么是webpack

webpack是一个打包工具,其作用是对整个项目中的js、image、css进行打包。

传统的前端项目引用的第三方js或者css的时候会存在两个很明显的问题:

  1. 引入依赖的所有代码
  2. 命名冲突

1.引入所有依赖:

HTML页面中通过<script></script>标签引入的依赖,浏览器在解析的时候要读取整个js才能完成正确的解析。

2.命名冲突:

在index.js中可能存在:

var a=1;

在home.js中也可能会存在:

var a=2;

node.js出现后允许通过require将依赖模块化的引入。

npm install someLib

require("someLib")

node.js和浏览器能解析的原生js语法是一样的,所以前端开始在node.js环境下进行开发,最后由打包工具打包成浏览器中可以正常允运行的页面。webpack就是这个打包工具。

1.2.loader

webpack是用loader来完成对静态资源的打包处理的,静态资源也就是指CSS、js、图片等资源。每一类静态资源都有对应的loader来进行处理。

Webpack 的 Loader 可以被看作是一种文件处理逻辑和规则的封装。每个 Loader 负责特定类型文件的处理,它们将源文件转换为模块,这些模块最终会被合并到打包后的文件中。

2.项目搭建

npm init -y
npm add webpack webpack-cli

3.打包js:

webpack提供了 import和export的方式去对js进行模块儿化的发布和引入。

同级目录下新建三个文件。

function.js:

export function getBlogPosts(){
    return 'hello world'
}

export function getBlogGets(){
    return 'hello world'
}

index.js:

import { getBlogPosts } from "./function";

console.log(getBlogPosts());

index.html:

由于打包出来的结果是js,为了方便展示打包出来的js,在html上引入打包出来的结果,便于观察。

<!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/main.js"></script>
</body>
</html>

使用webpack打包:

npx webpack

打包出来的dist目录下会生成main.js,里面是webpack解析出来的依赖:

webpack只打包了用到的模块.

webpack当然也有配置文件,在配置文件中可以对webpack的打包全流程进行配置化的管理。webpack会去读取项目下面的webpack.config.js文件(和package.json在一级目录上),根据文件中的配置来定制化的完成打包。以下是一个基础配置示例:

//引入path依赖,用来下面path寻找路径
const path=require("path");
module.exports={
	//用开发者模式来打包
	mode:"development",
	//入口js,js有很多,以那个作为根节点来进行依赖的梳理?
	entry:"./index.js",
	//打包结果
	output:{
		//打包成什么?
		filename:"dist.js",
		//路径是什么?
		path:path.resolve
	}
}

4.打包CSS

直接在html中引入css由于没有用到js,所以无法用到webpack的特性,在js中倒入css才能用到webpack的特性。

import "./style.css";
import vueimage from "./asserts/images/vue.png"
const blogs=['博客1','博客2','博客3'];

const ul=document.createElement("ul");
blogs.forEach((blog) => {
    const li =document.createElement("li");
    li.innerHTML=blog;
    ul.appendChild(li);
});

document.body.appendChild(ul);
const image =document.createElement("img");
image.src=vueimage;
document.body.prepend(image);

打包css需要loader:

npm add --dev style-loader css-loader

webpack.config.js配置:

//引入path依赖,用来下面path寻找路径
const path=require("path");
module.exports={
	//用开发者模式来打包
	mode:"development",
	//入口js,js有很多,以那个作为根节点来进行依赖的梳理?
	entry:"./src/index.js",
	//打包结果
	output:{
		//打包成什么?
		filename:"dist.js",
		//路径是什么?
		path:path.resolve(__dirname,"dist"),
	},
    //引入css的loader用来支持对css的的打包
    module:{
        rules:[
            {
                test:/\.css$/i,
                use:['style-loader','css-loader']
            },
        ],
    }
}

在js中引用即可:

5.打包图片

webpack内置有image的loader,也就是说要webpack打包image的时候不必安装额外的loader,在webpack.config.js配置一下即可。

//引入path依赖,用来下面path寻找路径
const path=require("path");
module.exports={
	//用开发者模式来打包
	mode:"development",
	//入口js,js有很多,以那个作为根节点来进行依赖的梳理?
	entry:"./src/index.js",
	//打包结果
	output:{
		//打包成什么?
		filename:"dist.js",
		//路径是什么?
		path:path.resolve(__dirname,"dist"),
	},
    module:{
        rules:[
			//配置css的loader用来支持对css的的打包
            {
                test:/\.css$/i,
                use:['style-loader','css-loader']
            }
			//配置image的loader用来支持对image的打包
			,{
				test:/\.(png|svg|jpg|jpeg|gif)$/i,
				type:"asset/resource"
			}
        ],
    }
}

在js中引入image:

效果:

6.插件

Webpack原生只支持对CSS、js、图片等静态资源的打包,Webpack 插件(Plugins)是用来扩展 Webpack 功能的一种方式。它们可以执行范围更广的任务,包括打包优化、资源管理、注入环境变量等。插件的使用可以在 Webpack 打包的不同阶段执行自定义操作,从而实现更灵活和强大的构建过程。

举个例子比如原生webpack是不支持对HTML的打包的,想要扩展对HTML的打包可以通过插件来实现。

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  // 其他配置...
  plugins: [
    new HtmlWebpackPlugin({
      template: 'src/index.html',
    }),
  ],
};

具体要用到哪些插件的时候可以去搜索:

你可以在 npm 官方网站 的搜索框中键入 "webpack plugin" 或者 "webpack loader" 来查找 Webpack 插件和 Loader。NPM 官网是 JavaScript 生态系统中广泛使用的包管理工具,你可以在这里找到几乎所有的 JavaScript 包,包括 Webpack 插件和 Loader。

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

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

相关文章

DTI综述(更新中)

Deep Learning for drug repurposing&#xff1a;methods&#xff0c;datasets&#xff0c;and applications 综述读完&#xff0c;觉得少了点东西&#xff0c;自己写个DTI综述 Databases(包括但不限于文章中的) DATABASEDESCRIBEBindingDB有详细的drug信息和对应的target&a…

美国绿氢项目开发商NovoHydrogen完成2000万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国科罗拉多州戈尔登的绿氢项目开发商NovoHydrogen今日宣布已完成2000万美元融资。 本轮融资由现代能源公司领投。 该公司打算利用这笔资金进一步扩大其团队&#xff0c;并将其绿氢项目的…

页面路由跳转 - 文件 File对象数据传递

目录 需求主要问题点问题点2.1 演示问题点2.2 演示及解决页面B 处理1 - 有问题页面B 处理2 - 没有问题 - 最终解决办法 【补充】 file 对象转为 base64 文件&#xff08;即 将 file 对象转为 DataURL&#xff09; 需求 页面A填写完信息&#xff08;填写的信息中有上传的文件&am…

操作系统 —— 处理机调度与死锁

&#xff08;一&#xff09;简答题 1.高级调度与低级调度的主要任务是什么&#xff1f;为什么要引人中级调度&#xff1f; 参考答案&#xff1a; ①高级调度的对象是作业。它的主要任务是根据某种算法&#xff0c;决定 将外存上处于后备队列中的哪几个作业调入内存&#xff0c…

SW中的面部曲线命令

今天学习老王的画图教程中看到在使用面部曲线命令&#xff0c;找了变天没有&#xff0c;于是开始四处查找模式&#xff0c;终于在一个视频中看到了&#xff0c;原来不是在曲面命令中&#xff0c;而是在草图命令中&#xff0c;老王为了迷惑学员&#xff0c;把这个面部曲线命令放…

vite+vue3.0 使用tailwindcss

参考资料&#xff1a; 安装 - TailwindCSS中文文档 | TailwindCSS中文网 npm install -D tailwindcss npm install postcss npm install autoprefixer npx tailwindcss init -p 生成/src/tailwind.config.js和/src/postcss.config.js配置文件 在/src/tailwind.config.js配置文件…

【广州华锐互动】VR建筑安全培训体验为建筑行业人才培养提供有力支持

随着建筑行业的快速发展&#xff0c;建筑施工安全问题日益受到广泛关注。然而&#xff0c;传统的安全培训方式往往缺乏实践性和真实性&#xff0c;难以让员工真正掌握安全操作技能。近年来&#xff0c;虚拟现实(VR)技术的广泛应用为建筑施工安全培训提供了新的机遇。 虚拟现实技…

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

在企业通讯领域&#xff0c;企业微信、钉钉和飞书等平台早已成为众多企业的首选。然而&#xff0c;对于一些企业来说&#xff0c;依赖公有云平台带来的数据安全和隐私问题仍然是一个隐患。因此&#xff0c;越来越多的企业开始关注私有化部署的解决方案。而在这个领域&#xff0…

JAVA转GO

GO 环境配置 go环境 下载go并安装(win下),环境变量他自己要配置上 https://dl.google.com/go/go1.21.3.windows-amd64.msi 验证是否安装成功: //打开cmd go versionVSCODE环境 下载VSCODE…略 配置VSCODE的环境 下载插件 go开发工具包 打开cmd,或者VSCODE自带的终端,…

OFDM基本原理

一、OFDM简述 OFDM 的全称是 Orthogonal Frequency Divisition Multiplexing&#xff0c;是一种多载波调制技术&#xff0c;其能有效对抗频率选择性衰落&#xff0c;克服信号符号间干扰。OFDM的技术的核心思想是将宽频率载波划分成多个带宽较小的正交子载波&#xff0c;并使用这…

2020年亚太杯APMCM数学建模大赛B题美国总统的经济影响分析求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 B题 美国总统的经济影响分析 原题再现&#xff1a; 美国总统选举每四年举行一次。 2020年是美国总统大选年&#xff0c;共和党候选人唐纳德特朗普和民主党对手乔拜登竞选总统。 甲乙双方候选人在金融贸易&#xff0c;经济金融治理&#xff0c;…

【嵌入式开发问答】不是普通的嵌入式八股

1. 进程、线程、堆栈、溢出 【问&#xff1a;】 进程的堆栈的物理内存是什么时候分配的&#xff1f; 堆栈的大小限制是多大&#xff1f;这个限制可以调整吗&#xff1f; 当堆栈发生溢出后应用程序会发生什么&#xff1f; 【答&#xff1a;】

七个开发者不可不知的VS Code小技巧

本文就来分享 7 个极大提高开发效率的 VS Code 技巧&#xff01; 目录 1.固定滚动&#xff08;Sticky Scroll&#xff09; 2.命令面板&#xff08;Command Palette&#xff09; 3.自定义代码片段&#xff08;Custom Snippets&#xff09; 4.文件查找&#xff08;File Finde…

软件测试方法分类

软件测试方法种类繁多&#xff0c;有白盒测试、黑盒测试、静态测试、动态测试、集成测试等等&#xff0c;记忆起来容易混乱&#xff0c;傻傻分不清楚&#xff0c;如果把软件测试方法进行分类, 就会清晰很多。现在小峰把常用的软件测试方法列出来&#xff0c;让大家更容易区分记…

百度发布文心大模型4.0,百度搜索实现重构;AI报告2023

&#x1f989; AI新闻 &#x1f680; 百度发布文心大模型4.0&#xff0c;百度搜索实现重构 摘要&#xff1a;10月17日&#xff0c;百度创始人李彦宏在百度世界2023上发布了文心大模型4.0&#xff0c;并开启邀请测试。这是迄今为止最强大的文心大模型&#xff0c;提升了理解、…

vue 自定义指令 -- 指令的值

vue 自定义指令 – 指令的值 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\05-自定义指令-指令的值 vue --vers…

HarmonyOS 语言基础类库开发指南上线啦!

语言基础类库提供哪些功能&#xff1f;多线程并发如何实现&#xff1f;TaskPool&#xff08;任务池&#xff09;和 Worker 在实现和使用场景上有何不同&#xff1f; 针对开发者关注的并发等语言基础类库的相关能力&#xff0c;我们在新推出的语言基础类库开发指南中提供了详细的…

pip报failed to create process

使用pip命令的时候报failed to create process 1、错误提示窗口如下图 2、报这个错误的原因&#xff0c;是因为你改动了python的目录名称或位置。因为&#xff0c;我的电脑是安装了anaconda2和anaconda3的&#xff0c;我想让python2和python3共存&#xff0c;就将anaconda2和a…

一些前端面试思考

回流和重绘 先牢记这句话&#xff0c;回流必将引起重绘&#xff0c;而重绘不一定会引起回流。回流的代价要远大于重绘。 当你给一个元素更换颜色&#xff0c;这样的行为是不会影响页面布局的&#xff0c;DOM树不会变化&#xff0c;但颜色变了&#xff0c;渲染树得重新渲染页面&…

可以充当销售的高品质画册是怎么制作的?

一本优秀的宣传画册就如同一个销售员&#xff0c;具有卓越的灵魂&#xff0c;可以让人达到赏心悦目的视觉效果。如何做出这种高品质的宣传画册呢&#xff1f; 其实很简单&#xff0c;FLBOOK里面汇集了各种各样的宣传画册模板 &#xff0c;只需一键套用模板制作&#xff0c;你也…