尚硅谷wepack课程学习笔记

2023-09-20 09:27:32

为什么需要使用打包工具?

开发时使用的框架、es6 语法 、less 等浏览器无法识别。
需要经过编译成浏览器能识别的css、js才可以运行。
打包工具可以帮我们编译,号可以做代码压缩、兼容处理、性能优化。

常见的打包工具有什么?
vite、webpack、glup、grunt

webapck最基本的使用?
是一个静态资源打包工具,以一个或多个文件为打包入口,将项目中所有文件编译组合成输入一个或多个文件。这个输出的文件我们交budle,他就是经过编译可以在浏览器运行的文件。

webpack本身的功能是有限的?
开发模式:仅仅编译js modle语法
生产模式:编译js modle语法、压缩js代码

package.json 是什么文件?
通常我们需要安装一些依赖包,而在下载这个包之前,我们需要包描述文件。通常描述这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证、如何启动项目、运行脚本等元数据。
package.json 一般在项目创建之初创建。创建方式可以手动(直接在项目根目录新建一个 package.json 文件)、也可以npm init -y 初始化一个,y 就是要使用配置的默认值
package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置

练习步骤:
1、新建一个包,名称不能和webpack重复
2、创建基本的mani.js 文件、src、public文件、写入es6 模块化语法,报错,浏览器无法识别。
3、试试使用webpack 后能否识别呢?无法解析modle语法
4、引入之前需要初始化一个包描述文件 npm init -y
5、npm install webpack webpack-cli --save-dev
6、安装成功后执行npx webpack ./src/main.js --mode=development ,npx 会将node—module 的bin 下面的内容临时添加到环境变量。
7、执行上面即可打包了。默认输出到dist,可以观察输出文件,是编译后的文件。
8、npx webpack ./src/main.js --mode=production 生产模式,会压缩代码

webapck的五大核心概念
入口entry
输入output
loader webpack本身只能处理js、json等资源,其他资源需要借助loader
plugin 拓展功能
mode 模式:生产、开发

练习步骤:
1、安装好之后建一个webpack的配置文件,在根路径下,并且文件名必须是webpack.config.js
2、添加基本配置
3、我们之前打包执行的是npx webpack ./src/main.js --mode=development 这个命令,写了webpack的配置文件中设置了入口后,可以直接使用npx webpack 执行了。上面是使用cli的方式运行本地的webpack,但这样还是有些麻烦。
4、在 package.json 文件中添加一个 npm script: “build”: “webpack”
现在,可以使用 npm run build 命令替代之前使用的 npx 命令。注意,使用 npm scripts 便可以像使用 npx 那样通过模块名引用本地安装的 npm packages。
拓展,可以学习下npm中文文档

资源管理
1、使用style样式,需要借助loader
2、npm install --save-dev style-loader css-loader
3、添加配置,参考官网

1、使用less资源
2、npm install less less-loader --save-dev
3、添加配置,参考官网

1、图片资源的使用
2、不需要要下载,使用内置的asset即可。资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader。``关于这块配置webpack官网介绍
3、添加配置,
{
test: /.(png|svg|jpg|jpeg|gif)$/i,
type: ‘asset/resource’,
},

1、对文件的加载,如 JSON 文件、CSV、TSV 和 XML。
2、npm install --save-dev csv-loader xml-loader
3、添加配置,参考官网

调整文件打包输出目录
每一次打包都会在dist下多一些文件,而且很混乱。我们在下一次打包之前手动删除dist,再重新打包。
并设置输出路径,文件资源可设置输出路径。

   generator: {
          filename: 'asset/[hash:10][ext][query]'
   }

可不可以不每次都需要手动删除呢?
能不能自动清除dist文件上次内容?可以,在output 对象中配置clean:true 即可。

发现问题:
1、原本html中引入的js资源是这么写的

 <script src="../dist/main.js"></script>

引入的是打包后的文件,如果更改入口起点的名称,或者添加一个新的入口,那么会在构建时重新命名生成的 bundle,但是 index.html 仍然在引用旧的名称!我们可以使用 HtmlWebpackPlugin 来解决这个问题。

处理js资源
webpack对于js资源的处理是有限的,只能处理model语法,对于es6新语法不兼容,我们需要使用babel
在转换之前先介绍一下eslint ,用于检查jx和jsx语法的工具。更多介绍eslint官网

在webpack中使用eslint
1、npm install eslint-webpack-plugin --save-dev
2、npm install eslint --save-dev
3、添加配置,参考官网

const ESLintPlugin = require('eslint-webpack-plugin');

module.exports = {
  // ...
  plugins: [new ESLintPlugin({
      context:path.resolve(__dirname,'src'),
    })]
  // ...
};

4、运行起来报错,缺少eslint的配置文件。我们在根目录下新建 .eslintrc.js 文件名不能改。
然后具体的配置可以参考官网,可以继承推荐的默认配置。

5、发现dist下定义的文件也被eslint 检查了,但我们并不需要检查这些文件。在根目录下创建一个 .eslintignore 文件,写上需要忽略的文件路径即可。

在webpack中使用babel

关于bable的介绍可以看bable官网
1、npm install -D babel-loader @babel/core @babel/preset-env webpack
2、配置,参考官网 bable配置
3、配置可以直接写在webpack的配置文件中,也可以在根目录创建 babel.config.js 配置。

更多推荐

Linux:基础开发工具之Makefile和缓冲区的基本概念

文章目录动静态库自动化构建代码缓冲区原理实现具体实现动静态库首先要知道什么是链接:C程序中,并没有定义printf的函数实现,且在预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径“/usr

JAVA面经整理(2)

一)解决哈希冲突的方法有哪些?哈希冲突指的是在哈希表中,不同的键值映射到了相同的哈希桶,也就是数组索引,导致键值对的冲突1)设立合适的哈希函数:通过哈希函数计算出来的地址要均匀的分布在整个空间中2)负载因子调节:2.1)开放地址法:1)当发生哈希冲突时,如果哈希表中没有装满,说明哈希表中一定还有空余位置,那么可以把ke

基于Python Django的公务员考试信息管理系统

文章目录1简介2.技术栈3功能分析4功能具体设计4.1软件功能模块设计4.2数据库设计与实现4.2.1概念模型设计4.2.2数据库逻辑结构设计5系统详细设计5.1系统功能模块5.2管理员功能模块六源码咨询1简介公务员考试信息管理系统的开发运用Python技术,MIS的总体思想,以及MYSQL等技术的支持下共同完成了该系

Linux系统编程(信号处理 sigacation函数和sigqueue函数 )

文章目录前言一、sigaction二、sigqueue函数三、代码示例总结前言本篇文章我们来介绍一下sigacation函数和sigqueue函数。一、sigactionsigaction是一个用于设置和检查信号处理程序的函数。它允许我们指定信号的处理方式,包括指定一个函数作为信号处理程序、设置标志位以及指定信号处理程

Linux系统编程(信号处理机制)

文章目录前言一、中断,异常,信号的区别二、信号在Linux中的标识三、信号处理相关函数四、代码实验总结前言本篇文章我们来讲解信号的处理机制,信号处理在Linux操作系统中必不可少,这一点值得大家注意,信号又会与中断,异常一起讨论,那么下面我们就来看看到底什么是信号吧。一、中断,异常,信号的区别中断、异常和信号是计算机系

MAC MINI 2012安装Montery折腾笔记

MACMINI2012安装Montery折腾笔记(作为电视盒子/远程开发机)起因:手头有个macmini,2018年买的2手。一直都是10.12系统,处理python和苹果开发都受制于旧系统,很多软件也装不上,于是有了升级的需求,打算折腾下再战3年直接升级使用因特网恢复系统模式,恢复到最新适配的版本开机时,按Win+A

一些docker笔记

一些docker笔记docker是一个跨平台,可迁移的应用虚拟化,容器化服务平台Docker口号1:Build,ShipandRun(构建,发送和运行)Docker口号2:Buildonce,Runanywhere(构建一次,到处能用)docker一些概念docker仓库官方有dockeHub仓库,也可以使用阿里、网易

Spring Authorization Server入门 (十八) Vue项目使用PKCE模式对接认证服务

Vue单页面项目使用授权码模式对接流程说明以下流程摘抄自官网在本例中为授权代码流程。授权码流程的步骤如下:客户端通过重定向到授权端点来发起OAuth2请求。对于公共客户端,此步骤包括生成code_verifier并计算code_challenge,然后将其作为查询参数发送。如果用户未通过身份验证,授权服务器将重定向到登

PostgreSQL16源码包编译安装

一、安装环境操作系统:CentOSLinuxrelease7.8.2003(Core)PostgreSQL版本:16服务器IP地址:192.168.0.244Firewalld关闭、selinux关闭笔者本次选用最新v16版本进行部署二、pg数据库安装包下载下载地址:https://www.postgresql.org

第八章 排序

一、插入排序不带哨兵voidInsertSort(intA[],intn){inti,j,temp;for(i=1;i<n;i++){if(A[i]<A[i-1]){temp=A[i];for(j=i-1;j>=0&&A[j]>temp;--j){A[j+1]=A[j];}A[j+1]=temp;}}}带哨兵voidI

二分与前缀和

目录🍈前言❤二分🌹二分🌼数的范围🌼数的三次方根🌼特殊数字🌼机器人跳跃问题🌼四平方和🌼分巧克力🌹前缀和🌼前缀和🌼子矩阵的和🌼激光炸弹🌼K倍区间🍈前言❤二分整数二分模板中,一个比较坑的点,就是C++整数向下取整的机制,考虑到这点,你才能写出AC100%的代码关键在于1,对if()后面条件的判断2

热文推荐