前端工程化09-webpack静态的模块化打包工具(未完结)

9.1、开发模式的进化历史

webpacks是一个非常非常的强大的一个工具,相应的这个东西的学习也是有一定的难度的,里边的东西非常的多,里面涉及到的

概念的话也是非常非常的多的。

这个东西既然非常重要,那么在我们前端到底处于怎样的一个地位呢?

有些人学习到这个阶段已经分不清楚了,到底什么是node,什么是npm/什么是webpack,所以我们有必要了解下前端开发的架构图

目前我们前端比较流行的三大框架,Vue/React/Angular/,国内用Angular的非常少,如果公司需要你会,那么可以研究下,如果不

是就没有必要把太多的精力放到、Angular上,本身这个东西的需求比较少,岗位也比较少,那么这个时候你花费更多时间学习

Angular是没有什么太大的回报的,但是不可否认Angular是一个非常优秀的框架,他里边的架构设计也是非常优秀的~后续聊,目

前我们国内用的最多的还是Vue和React

我们目前的开发模式已经不是以前的那种模式,我先创建一个index.html,然后写标签写内容,下几个js文件,引入到项目里,在

写对应的js,写css什么的

现在的模式,假如你现在要开发一个旅游项目,先考虑用什么包管理工具,用npm还是用yarn,之后在确定给你的项目用到的打包

工具webpack,然后在当前的架构下边确定用什么前端框架开发,比如Vue,React,Angular,在写具体的代码,有人说了,那我不会

搭建这个架构怎么办,这个不需要担心,因为现在,你不管去开发Vue项目还是开发React这个项目,他们都有对应的脚手架来帮

助你进行快速开发,所谓的脚手架,不管是Vue的还是React的他们呢都是基于Webpack的。

image-20240629235709605

9.2、Webpack使用Node内置的Path模块

path模块是node的内置模块,通常用于对路径和文件进行处理,提供了很多好用的方法

我们知道在Mac OS、Linux和window上的路径时不一样的

  • window上会使用 \或者 \ 来作为文件路径的分隔符,当然目前也支持 /;
  • 在Mac OS、Linux的Unix操作系统上使用 / 来作为文件路径的分隔符;

那么如果我们在window上使用 \ 来作为分隔符开发了一个应用程序,要部署到Linux上面应该怎么办呢?

  • 显示路径会出现一些问题;
  • 所以为了屏蔽他们之间的差异,在开发中对于路径的操作我们可以使用 path 模块;

可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)

  • Linux和Mac OS都实现了POSIX接口;
  • Window部分电脑实现了POSIX接口;

9.3、path模块常见的API

从路径中获取信息

  • dirname:获取文件的父文件夹;
  • basename:获取文件名;
  • extname:获取文件扩展名;

路径的拼接:path.join

  • 如果我们希望将多个路径进行拼接,但是不同的操作系统可能使用的是不同的分隔符;
  • 这个时候我们可以使用path.join函数;

拼接绝对路径:path.resolve

  • path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径;
  • 给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径;
  • 如果在处理完所有给定path的段之后,还没有生成绝对路径,则使用当前工作目录;
  • 生成的路径被规范化并删除尾部斜杠,零长度path段被忽略;如果没有path传递段,
  • path.resolve()将返回当前工作目录的绝对路径;

image-20240630221719340

9.4、path模块在webpack中的使用

image-20240630221909697

9.5、正确认识webpack

事实上随着前端的快速发展,目前前端的开发已经变的越来越复杂了:

  • 比如开发过程中我们需要通过模块化的方式来开发;
  • 比如也会使用一些高级的特性来加快我们的开发效率或者安全性,比如通过ES6+、TypeScript开发脚本逻辑,通过sass、less等方式来编写css样式代码;
  • 比如开发过程中,我们还希望实时的监听文件的变化来并且反映到浏览器上,提高开发的效率;
  • 比如开发完成后我们还需要将代码进行压缩、合并以及其他相关的优化;
  • 等等

但是对于很多的前端开发者来说,并不需要思考这些问题,日常的开发中根本就没有面临这些问题:

  • 这是因为目前前端开发我们通常都会直接使用三大框架来开发:Vue、React、Angular;
  • 但是事实上,这三大框架的创建过程我们都是==借助于脚手架(CLI)==的;
  • 事实上Vue-CLI、create-react-app、Angular-CLI都是基于webpack来帮助我们支持模块化、less、TypeScript、打包优化等的;

工程化章节会去学习一些webpack的高级特性

9.6、脚手架依赖于webpack

image-20240630222627042

9.7、Webpack到底是什么呢?

我们先来看一下官方的解释:

  • webpack is a static module bundler for modern JavaScript applications.

webpack是一个静态的模块化打包工具,为现代的JavaScript应用程序;

  • 打包bundler:webpack可以将帮助我们进行打包,所以它是一个打包工具
  • 静态的static:这样表述的原因是我们最终可以将代码打包成最终的静态资源(部署到静态服务器);
  • 模块化module:webpack默认支持各种模块化开发,ES Module、CommonJS、AMD等;
  • 现代的modern:我们前端说过,正是因为现代前端开发面临各种各样的问题,才催生了webpack的出现和发展;

Webpack官网的图片

image-20240630223224320

9.8、Vue项目加载的文件有哪些呢?

JavaScript的打包:

  • 将ES6转换成ES5的语法;
  • TypeScript的处理,将其转换成JavaScript;

Css的处理:

  • CSS文件模块的加载、提取;
  • Less、Sass等预处理器的处理;

资源文件img、font:

  • 图片img文件的加载;
  • 字体font文件的加载;

HTML资源的处理:

  • 打包HTML资源文件;

处理vue项目的SFC文件.vue文件;

9.1、Webpack的使用前提

webpack的官方文档是https://webpack.js.org/

  • webpack的中文官方文档是https://webpack.docschina.org/
  • DOCUMENTATION:文档详情,也是我们最关注的

Webpack的运行是依赖Node环境的,所以我们电脑上必须有Node环境

  • 所以我们需要先安装Node.js,并且同时会安装npm;
  • 我当前电脑上的node版本是v16.15.1,npm版本是8.11.0(你也可以使用nvm或者n来管理Node版本);
  • Node官方网站:https://nodejs.org/

image-20240630223732485

9.2、Webpack的安装

webpack的安装目前分为两个:webpack、webpack-cli

注意:从webpack4版本开始,你要想安装webpack就必须要同时安装俩东西。这个webpack-cli在用的时候是我们在命令行中使用webpack,必须要用的一个东西,

这个东西的作用是他会识别我们的命令行,假如说你是通过代码的方式来使用webpack的,比如const webpack=require(“webpack”) ,webpack.compile(),编译某

个文件,如果我自己写代码打包,那就不需要webpack-cli,但是我们目前使用webpack都是在命令行输入命令webpack --entry,

为了识别这个命令,都是webpack-cli在做的,

那么它们是什么关系呢?

  • 执行webpack命令,会执行node_modules下的.bin目录下的webpack;
  • webpack在执行时是依赖webpack-cli的,如果没有安装就会报错;
  • 而webpack-cli中代码执行时,才是真正利用webpack进行编译和打包的过程;
  • 所以在安装webpack时,我们需要同时安装webpack-cli(第三方的脚手架事实上是没有使用webpack-cli的,而是类似于自己的vue-service-cli的东西)

image-20240630224035525

npm install webpack webpack-cli –g # 全局安装
npm install webpack webpack-cli –D # 局部安装

全局安装在那敲命令都能用

那一般来说,是局部安装多还是全局安装多一点

  • 一般是局部安装多一点,为什么?

假如说你的电脑里边有仨项目,分别是Vue2的、Vue3的项目、React的项目,这个三个项目都需要进行打包,但是不可能他们依赖的webpack版本完全一样,大概率是不一样的。所以每个项目里边有自己webpack

9.3、创建局部的webpack

前面我们直接执行webpack命令使用的是全局的webpack,如果希望使用局部的可以按照下面的步骤来操作。

第一步:创建package.json文件,用于管理项目的信息、库依赖等

npm init

第二步:安装局部的webpack

npm install webpack webpack-cli -D

第三步:使用局部的webpack

npx webpack

第四步:在package.json中创建scripts脚本,执行脚本打包即可

image-20240630232720319

npm run build

9.4、Webpack的默认打包

我们可以通过webpack进行打包,之后运行打包之后的代码

  • 在目录下直接执行 webpack 命令
    • webpack

生成一个dist文件夹,里面存放一个main.js的文件,就是我们打包之后的文件:

  • 这个文件中的代码被压缩和丑化了;
  • 另外我们发现代码中依然存在ES6的语法,比如箭头函数、const等,这是因为默认情况下webpack并不清楚我们打包后的文件是否需要转成ES5之前的语法,后续我们需要通过babel来进行转换和设置;

我们发现是可以正常进行打包的,但是有一个问题,webpack是如何确定我们的入口的呢?

  • 事实上,当我们运行webpack时,webpack会查找当前目录下的 src/index.js作为入口;
  • 所以,如果当前项目中没有存在src/index.js文件,那么会报错;

当然,我们也可以通过配置来指定入口和出口

#改index.js生成的文件名
npx webpack --entry ./src/main.js --output-filename ./bundle.js
#改生成的dist目录名
npx webpack --entry ./src/main.js --output-filename ./bundle.js  --output-path ./build

但是一般这个目录太长了,我们不会这么写的,都是配置一个配置文件

9.5、Webpack配置文件

在通常情况下,webpack需要打包的项目是非常复杂的,并且我们需要一系列的配置来满足要求,默认配置必然是不可以的。

我们可以在根目录下创建一个webpack.config.js文件,来作为webpack的配置文件:

image-20240630232930846

继续执行webpack命令,依然可以正常打包

npm run build
const path = require("path")module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./build")}
}

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

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

相关文章

HCIA4.26-5.10

OSPF ——开放式最短路径优先协议 无类别链路状态IGP动态路由协议 距离矢量协议 运行距离矢量协议的路由器会周期性的泛洪自己的路由表,通过路由之间的交互,每台路由器都从相邻的路由器学习到路由条目,随后加载进自己的路由表中。对于网络…

Python代码分析和修复工具库之coala使用详解

概要 代码质量在软件开发中至关重要,保持代码的可读性、一致性和易维护性是每个开发者的目标。coala 是一个开源的代码分析和修复工具,旨在帮助开发者自动化代码质量检查,支持多种编程语言,包括 Python、C++、JavaScript 等。通过使用 coala,开发者可以方便地集成代码检查…

AI时代的软件工程:挑战与改变

人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程(Software Engineering)是关于如何系统化、规范化地…

input调用手机摄像头实现拍照功能vue

项目需要一个拍照功能&#xff0c;实现功能如下图所示:若使用浏览器则可以直接上传图片&#xff0c;若使用手机则调用手机摄像头拍照。 1.代码结构 <!--input标签--> <input ref"photoRef"type"file"accept"image/*"capture"envir…

基于多源数据的密码攻防领域知识图谱构建

源自&#xff1a; 信息安全与通信保密杂志社 作者&#xff1a;曹增辉 , 郭渊博 , 黄慧敏 摘 要 提高网络空间安全的密码攻防能力&#xff0c;需要形成可表示、可共享、可分析的领域知识模式和知识库。利用自顶向下的构建方法&#xff0c;并通过本体构建方法梳理密码攻防领域…

IPSec:互联网协议安全机制的深度解析与应用

目录 一、IPSec概述 二、IPSec的组成 三、IPSec的工作原理 四、IPSec的用途 IPSec&#xff08;Internet Protocol Security&#xff09;作为现代网络通信中不可或缺的安全基础设施&#xff0c;旨在为基于IP&#xff08;Internet Protocol&#xff09;的数据传输提供端到端的…

【Linux】虚拟机安装openEuler 24.03 X86_64 教程

目录 一、概述 1.1 openEuler 覆盖全场景的创新平台 1.2 系统框架 1.3 平台框架 二、安装详细步骤 一、概述 1.1 openEuler 覆盖全场景的创新平台 openEuler 已支持 x86、Arm、SW64、RISC-V、LoongArch 多处理器架构&#xff0c;逐步扩展 PowerPC 等更多芯片架构支持&…

iptables 防火墙(一)

iptables 防火墙&#xff08;一&#xff09; 一、Linux 防火墙基础防火墙分类 二、iptables 的表、链结构规则表规则链数据包过滤的匹配流程 三、编写防火墙规则iptables 的安装iptables的基本语法规则的匹配条件通用匹配隐含匹配显式匹配 四、总结 在网络安全的世界里&#xf…

XRP对接文档

XRP对接文档 技术预研 参考文档 官方文档: https://xrpl.org/list-xrp-in-your-exchange.html 官方文档: https://xrpl.org/list-xrp-as-an-exchange.html#flow-of-funds 交易所对接XRP(内容齐全, 很推荐) https://blog.csdn.net/weixin_40396076/article/details/10020207…

基于51单片机的篮球计时器Proteus仿真

文章目录 一、篮球计时器1.题目要求2.思路3.仿真图3.1 未仿真时3.2 仿真开始3.3 A队进分3.4 B队进分3.5 比赛结束 4.仿真程序4.1 主函数4.2 时间显示4.3 比分显示4.4 按键扫描 二、总结 一、篮球计时器 1.题目要求 以51单片机为核心&#xff0c;设计并制作篮球计时器 基本功…

python实现符文加、解密

在历史悠久的加密技术中&#xff0c;恺撒密码以其简单却有效的原理闻名。通过固定的字母位移&#xff0c;明文可以被转换成密文&#xff0c;而解密则是逆向操作。这种技术不仅适用于英文字母&#xff0c;还可以扩展到其他语言的字符体系&#xff0c;如日语的平假名或汉语的拼音…

医院管理系统带万字文档医院预约挂号管理系统基于spingboot和vue的前后端分离java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 医院管理系统 二、项目介绍 基于springbootvue的前后端分离医院管…

跨阻放大器

#创作灵感# 最近涉及到微电流的监测项目&#xff0c;而里面的核心就是跨阻放大器&#xff0c;所以这里做一个简单的介绍&#xff0c;后续等项目完成了&#xff0c;再做一个实例的介绍。 #正文# 跨阻放大器&#xff08;Transimpedance Amplifier, TIA&#xff09;是一种将输入电…

NCBI Virus 帮助文档

What is NCBI Virus?&#xff08;什么是NCBI病毒&#xff09; 主要功能&#xff1a; Compare your sequence to those in the NCBI Virus database using NCBI BLAST algorithm. 使用NCBI BLAST算法将您的序列与NCBI病毒数据库中的序列进行比较。Search, view and download …

威联通 NAS 磁盘扩容 更换大容量磁盘具体操作以以TS-532X为例

第一步 检查磁盘状态 打开存储与快照总管&#xff0c;选左侧磁盘查看磁盘状态&#xff0c;应该是就绪状态。 三块磁盘都是就绪状态。 上面截图是更换过程中的截图 具体操作 然后点击存储/快照 &#xff0c;选管理 选逐一更换磁盘&#xff0c;这里raid组需要注意&#xff0…

【LeetCode】 740. 删除并获得点数

这真是一道好题&#xff01;这道题不仅考察了抽象思维&#xff0c;还考察了分析能力、化繁为简的能力&#xff0c;同时还有对基本功的考察。想顺利地做出这道题还挺不容易&#xff01;我倒在了第一步与第二步&#xff1a;抽象思维和化繁为简。题目的要求稍微复杂一些&#xff0…

数据恢复篇:如何在电脑上恢复已删除和丢失的音乐文件

尽管流媒体网络非常流行&#xff0c;但许多人仍然选择将音乐下载并保存在 PC 本地。这会使文件面临丢失或意外删除的风险。 幸运的是&#xff0c;您可以使用数据恢复软件恢复已删除的音乐和其他文件类型。这篇文章讨论了这些解决方案以及如何使用奇客数据恢复检索丢失的音乐文…

02.Linux下安装FFmpeg

目录 一、下载FFmpeg的编译源码 二、编译源码 三、ffmpeg工具结构解析 1、bin目录 2、include库 3、lib库 四、注意事项 五、可能出现的一些问题 1、某些工具未安装/版本过久 2、缺少pkg-config工具 3、缺少ffmplay FFmpeg 是一个开源的跨平台音视频处理工具集&…

科普文:八大排序算法(JAVA实现)+ 自制动画 (袁厨的算法小屋)

我将我仓库里的排序算法给大家汇总整理了一下&#xff0c;写的非常非常细&#xff0c;还对每个算法制作了动画&#xff0c;一定能够对大家有所帮助&#xff0c;欢迎大家阅读。另外我也对 leetcode 上面可以用排序算法秒杀的算法题进行了总结&#xff0c;会在后面的文章中进行发…

Python自动化运维 系统基础信息模块

1.系统信息的收集 系统信息的收集&#xff0c;对于服务质量的把控&#xff0c;服务的监控等来说是非常重要的组成部分&#xff0c;甚至是核心的基础支撑部分。我们可以通过大量的核心指标数据&#xff0c;结合对应的检测体系&#xff0c;快速的发现异常现象的苗头&#xff0c;进…